DLLまたはEXEからのAsprovaプロジェクトオブジェクト取得方法

Asprovaの各テーブルにアクセスするためには、メモリ上に展開されているAsprovaのプロジェクトオブジェクトを通す必要があり、このプロジェクトオブジェクトの取得方法はDLLとEXEでは異なります。DLLの場合は引数argsにASPArgListというプラグインキーに関連のあるオブジェクトのリストをロードしここからプロジェクトオブジェクトを取得しますが、EXEの場合は所定のプロジェクトファイルをロードしたドキュメントオブジェクトからアクティブなプロジェクトを取得します。

拡張プラグイン(DLL)の場合

'(ASPArgList内にあるオブジェクトの定義と取得)
'------------------------------------------------------------------
Public Function AddPersonPlan(args As ASPArgList) As TReturnType

    'APSの各テーブルのオブジェクトにはプロジェクトオブジェクトからアクセスする
    'プロジェクトオブジェクトはargsインターフェイスから取得
    'ASPAgrListオブジェクトからプロジェクトオブジェクトをASBProject型変数に代入することにより引数を受け取る

    Dim project As aslib.ASBProject
    Set project = args.ArgAsObject(kArgProject)

    'プロジェクトオブジェクトからRootObjectをASORootObject型変数に代入
    Dim root As aslib.ASORootObject
    Set root = project.RootObject

    'プロジェクトオブジェクトからRootCalendarオブジェクトをASBCalendar型変数に代入
    Dim calendarRoot As aslib.ASBCalendar
    Set calendarRoot = project.RootCalendar

    'プロジェクトオブジェクトからRootResourceオブジェクトをASBResource型変数に代入
    Dim resourceRoot As aslib.ASBResource
    Set resourceRoot = project.RootResource

    'プロジェクトオブジェクトからorderRootオブジェクトをASBOrder型変数に代入
    Dim orderRoot As aslib.ASBOrder
    Set orderRoot = project.orderRoot

    'プロジェクトオブジェクトからitemRootオブジェクトをASBItem型変数に代入
    Dim itemRoot As aslib.ASBItem
    Set itemRoot = project.itemRoot

    'プロパティIDの格納用変数の定義
    Dim propID1 As Long

'(取得したオブジェクトへのアクセス)
'------------------------------------------------------------------
    'カレンダーオブジェクトの子供の数(レコード数)
    calendarCount1 = calendarRoot.ChildCount

    'ルートオブジェクトを使って資源コードのプロパティIDを取得
    propID1 = root.LookupPropID("Cal_Resource")

    'レコードが終了するまでループ
    'ChildAsCalendarの引数は1から(0は最後のデータを表す)
    For i = 1 To calendarCount1
        'レコードにアクセス
        Set calendar = calendarRoot.ChildAsCalendar(i)

        'GetAsStrメソッドでプロパティの値にアクセス。プロパティが配列値でなければ2番目の引数は1を設定
        res1 = calendar.GetAsStr(propID1, 1)
    Next

End Function



Standard EXEの場合

プラグインや拡張インターフェイスとは異なり、Asprovaの外にあるEXEプログラムからAsprovaのオブジェクトを取得する必要があります。この場合はドキュメントオブジェクトに所定のプロジェクトファイルをロードし、ドキュメントオブジェクトからアクティブなプロジェクトを取得します。

Private Sub Command1_Click()

    '■■■Asprova関連オブジェクト■■■
    'Asprovaプロジェクトオブジェクト定義
    Dim m_pProject As ASBProject
    Dim m_pDoc As ASFDocument

    'アスプローバアプリケーションを取得
    Dim app As ASFApplication
    Set app = New ASFApplication

    'アスプローバドキュメントの名前を指定して開く
    Set m_pDoc = app.Deserialize(CurDir & "\data.aru")

    'アクティブなプロジェクトをドキュメントから取得
    Set m_pProject = m_pDoc.ActiveProject

    '■■■作業テーブルから末端オーダ品目でマッチング■■■
    '作業オブジェクト取得
    Dim operation As ASBOperation
    Dim operationList As ASOObjectList
    Set operationList = m_pProject.GetOperationList(False)

    'ルートオブジェクトの取得
    Dim root As ASORootObject
    Set root = m_pProject.RootObject

    'propIDの取得(rootオブジェクトから取得)
    propID1 = root.LookupPropID("Work_OperationOutMainItemQty")

    'プロジェクト全体の作業を取得して1発マッチング
    operationList.FilterByExprStr ("WorkUser_MostRightOrderItem=='" & Left(Combo1.Text, 7) & "')

    '製造開始日時の昇順でソートする。
    operationList.SortByExprStr ("Work_OperationProductionStartTime,a")

    Do
        'リストのデータを取得
        Set operation = operationList.Object(i)
        '値の取得
        PrdQty = operation.GetAsStr(propID1, 1)
        '値の保存
        operation.SetAsStr propID1, 1, Text1.Text

        i = i + 1

    Loop While i <= operationList.ObjectCount

    '■■■資源テーブルのデータを1件ずつチェック■■■
    '資源オブジェクト定義
    Dim RootResource As AsLib.ASBResource
    Dim resource As AsLib.ASBResource

    '資源ルートオブジェクトの取得
    Set RootResource = m_pProject.RootResource

    'propIDの取得(rootオブジェクトから取得)
    propID2 = root.LookupPropID("Res_Code")

    '資源テーブルのレコード数
    ResourceCount = RootResource.ChildCount

    For i = 1 To ResourceCount
        Set resource = RootResource.ChildAsResource(i)
        ResCode = resource.GetAsStr(propID2, 1)

    Next i

    '■■■品目テーブルから品目コードでマッチング■■■
    '品目オブジェクトの定義
    Dim RootItem As ASBItem
    Dim Item As ASBItem

    '品目ルートオブジェクトの取得
    Set RootItem = m_pProject.RootItem

    '品目オブジェクトの取得
    Set Item = RootItem.FindChild(Left(Combo1.Text, 7))

    '品目テーブルでマッチしたレコード数
    ItemCount=Item.ChildCount
End Sub