メモ

主にプログラミング系の備忘録

初めてのPython。せっかくだからBackLogAPIもついでにいじってみた

pybacklog https://github.com/netmarkjp/pybacklog

xlwings https://www.xlwings.org/
使ってます。

backlogfunc.py

from pybacklog import BacklogClient
from xlwings import *

SPACE_NAME = ''
API_KEY = ''
PROJECT_KEY = ''

# バージョン/ マイルストーン情報登録
def setVersion(VersionName,StartDate,ReleaseDate):

    client = BacklogClient(SPACE_NAME, API_KEY)

    response = client.create_version(PROJECT_KEY,VersionName,StartDate,ReleaseDate)

    return response["id"]

# 課題情報取得
def getTemplateIssue(IssueKey):
    client = BacklogClient(SPACE_NAME, API_KEY)

    # テンプレート課題の情報を取得
    TemplateIssue = client.issue(IssueKey)

    tmp = [TemplateIssue["category"][0]["id"] , TemplateIssue["summary"],TemplateIssue["description"]]
    
    return tmp
    
# 課題登録
def setIssue(strSummary,strStartDate,strDueDate,strDescription,strCategoryID,strVersionID,strParentIssueKey=''):
    client = BacklogClient(SPACE_NAME, API_KEY)

    #ProjectID
    PID = client.get_project_id(PROJECT_KEY)

    #IssueTypeID を取得
    IssueTypeList = client.project_issue_types(PROJECT_KEY)

    for IssueType in IssueTypeList:
        if IssueType["name"] == "タスク" :
            IssueTypeID = IssueType["id"]
            break

    #課題を登録
    ExtraRequestParam = {
        "description":strDescription,
        "startDate" :strStartDate,
        "dueDate":strDueDate,
        "categoryId[]":strCategoryID,
        "versionId[]":strVersionID
    }


    # 親課題に紐づける場合
    if strParentIssueKey !='':
        ExtraRequestParam["parentIssueId"] = str(client.get_issue_id(strParentIssueKey))

    response = client.create_issue(str(PID),strSummary,str(IssueTypeID),"3",ExtraRequestParam)


    # 課題IDを返す
    return response["id"]

# Excelから課題情報取得

def xl_getIssue():
    wb = Book.caller()
    ws = wb.sheets('WORK')

    ret = getTemplateIssue(ws.range('A1').value)

    ws.range('A2').value = ret[0]
    ws.range('A3').value = ret[1]
    ws.range('A4').value = ret[2]

# Excelからバージョン情報登録
def xl_setVersion():
    wb = Book.caller()
    ws = wb.sheets('WORK')

    ws.range('A4').value = setVersion(ws.range('A1').value,ws.range('A2').value,ws.range('A3').value)

# Excelから親課題を登録
def xl_setIssue_Parent():
    wb = Book.caller()
    ws = wb.sheets('WORK')
    #debug

    ws.range('A8').value = setIssue(\
    ws.range('A1').value,
    ws.range('A2').value,
    ws.range('A3').value,
    ws.range('A4').value,
    ws.range('A5').value,
    ws.range('A6').value)

# Excelから子課題を登録        
def xl_setIssue_Child():
    wb = Book.caller()
    ws = wb.sheets('WORK')
    #debug

    ws.range('A8').value = setIssue(\
    ws.range('A1').value,
    ws.range('A2').value,
    ws.range('A3').value,
    ws.range('A4').value,
    ws.range('A5').value,
    ws.range('A6').value,
    ws.range('A7').value)

Excel側はこんな感じ

' 課題情報取得
Public Sub py_getIssue()
  
  Dim wb As Workbook: Set wb = ThisWorkbook
  Dim wsCalc As Worksheet: Set wsCalc = wb.Worksheets("WORK")
  
  wsCalc.Cells.Clear
  wsCalc.Range("A:A").NumberFormatLocal = "@"
  
  wsCalc.Range("A1").Value = "" '課題Key
  RunPython ("import backlogfunc; backlogfunc.xl_getIssue();")
  
End Sub

' バージョン情報登録
Public Sub py_setVersion()
  Dim wb As Workbook: Set wb = ThisWorkbook
  Dim wsCalc As Worksheet: Set wsCalc = wb.Worksheets("WORK")
  
  wsCalc.Cells.Clear
  wsCalc.Range("A:A").NumberFormatLocal = "@"
  
  wsCalc.Range("A1").Value = "EXCELから登録テスト"
  wsCalc.Range("A2").Value = Format(Now(), "YYYY-MM-DD")
  wsCalc.Range("A3").Value = Format(Now() + 30, "YYYY-MM-DD")
  
  RunPython ("import backlogfunc; backlogfunc.xl_setVersion();")


End Sub

' 課題登録
Public Sub py_setIssue()
  Dim wb As Workbook: Set wb = ThisWorkbook
  Dim wsCalc As Worksheet: Set wsCalc = wb.Worksheets("WORK")
  
  '1:strSummary
  '2:strStartDate
  '3:strDueDate
  '4:strDescription
  '5:strCategoryID
  '6:strVersionID
  '7:strParentIssueKey
  '8:IssueID(返り値)
  
  '試作品につき、課題件名 カテゴリID 詳細はほかの課題から取得 実際は引数に
  Call py_getIssue
  Dim sSummary As String: sSummary = wsCalc.Range("A3").Value
  Dim sCategoryId As String: sCategoryId = wsCalc.Range("A2").Value
  Dim sDescription As String: sDescription = wsCalc.Range("A4").Value
  
  With wsCalc

    .Cells.Clear
    .Range("A:A").NumberFormatLocal = "@"
  
    .Range("A1").Value = sSummary & "_Excelから登録"
    .Range("A2").Value = Format(Date, "YYYY-MM-DD")
    .Range("A3").Value = Format(Date + 30, "YYYY-MM-DD")
    .Range("A4").Value = sDescription
    .Range("A5").Value = sCategoryId
    .Range("A6").Value = "" 'バージョンID
    .Range("A7").Value = "" '親課題キー(未設定の場合は親課題として登録/設定がある場合は子課題として登録)
    
  End With
  
  If wsCalc.Range("A7").Value = "" Then
    RunPython ("import backlogfunc; backlogfunc.xl_setIssue_Parent();")
  Else
    RunPython ("import backlogfunc; backlogfunc.xl_setIssue_Child();")
  End If

End Sub