Flex Gateway新着情報
Governance新着情報
Monitoring API Managerデモプロジェクトを構築して実行すると、Microsoft Dynamics 365 Connector の理解を深めることができます。
このデモプロジェクトを構築して実行するには、以下が必要です。
Mule 4.0 以降の Anypoint Studio。
Microsoft Dynamics 365 Connector v1.0.0 以降。
Microsoft Dynamics 365 (CRM 8.2)
以下の例には、次の <flow>
要素が含まれます。
CREATE_EMPTY_CONTACT_DEMO
後で他のフローで必要になる空の取引先責任者エンティティを作成します。
[GET] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/createContact
CREATE_EMPTY_OPPORTUNITY_DEMO
後で他のフローで必要になる空の商談エンティティを作成します。
[GET] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/createOpportunity
CREATE_ACCOUNT_DEMO
指定された属性を使用して取引先を作成し、さらに取引先を取引先責任者に関連付けます。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/createAccount
=
要求の例: {"AccountName":"Test Account Name","CreditOnHold":true,"CreditLimit":1000,"ContactID":"<ID>"}
CREATE_MULTIPLE_ENTITIES_DEMO
1 つのバッチ要求で同じ種別のエンティティを複数作成します。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/createMultipleAccounts
要求の例: [{"AccountName":"Account Name 1","CreditOnHold":true,"CreditLimit":1500},{"AccountName":"Account Name 2","CreditOnHold":false,"CreditLimit":2000}]
UPDATE_MULTIPLE_ENTITIES_DEMO
1 つのバッチ要求で同じ種別のエンティティを複数更新します。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/updateMultipleAccounts
要求の例: [{"EntityId":"<ID>","AccountName":"Updated Name 1"},{"EntityId":"<ID>","AccountName":"Updated Name 2"}]
DELETE_ENTITY_DEMO
指定された種別のエンティティを削除します。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/deleteAccount
要求の例: {"EntityId":"<ID>"}
RETRIEVE_ENTITY_DEMO
指定された種別のエンティティを取得します。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/retrieveAccount
要求の例: {"EntityId":"<ID>"}
RETRIEVE_ENTITIES_BY_URL_DEMO
URL 要求に基づいて複数のエンティティを取得します。
[GET] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/retrieveAccountsByURL
RETRIEVE_ENTITIES_BY_QUERY_DEMO
DataSense クエリ言語に基づいて複数のエンティティを取得します。
[GET] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/retrieveAccountsByQuery
DISASSOCIATE_ENTITIES_DEMO
エンティティの関連付けを解除します。要求を実行するエンティティの ID と関連付けを解除するキーを指定します。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/disassociateEntities
要求の例: {"EntityId":"<ID>","EntityLinkKeys":["primarycontactid"]}
DO_ACTION_DEMO
WinOpportunity
アクションをコールします。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/doAction
要求の例: {"Subject":"Won Opportunity","Status":3,"OpportunityId":"<OP_ID>"}
http://localhost:8081
を参照してフローをテストするか、curl のようなツールや、URL のコール時にボディの POST を実行できる他のツール (Chrome/Mozilla Firefox の拡張機能) を使用して JSON の POST を実行できます。
/src/main/resources/mule-artifact.properties で、OAuth2 ユーザー名/パスワード設定の OAuth2 ログイン情報を指定します。
config-oauth-user-pass.username
セッションを初期化するユーザー名
config-oauth-user-pass.password
ユーザーの認証に使用するパスワード
config-oauth-user-pass.resource
Web API のアプリケーション ID URI (セキュアなリソース)。CRM バージョンを指定しない、ルート URI である必要があります (例: https://<your-org>.crm2.dynamics.com/
)。
config-oauth-user-pass.clientId
アプリケーションを Azure Active Directory に登録したときに割り当てられたアプリケーション ID。この ID は Azure Portal で確認できます。
config-oauth-user-pass.clientSecret
アプリケーション登録ポータルでアプリケーション用に作成したアプリケーションシークレット。クライアントシークレットは信頼のおける方法でデバイスに保存できないため、シークレットをネイティブアプリケーションで使用しないでください。シークレットは Web アプリケーションと Web API で必要です (クライアントシークレットをサーバー側で安全に保存できます)。
config-oauth-user-pass.tokenRequestEndpoint
アクセストークンを取得するためにコールされるトークンエンドポイント。例: https://login.windows.net/<tenant-id>/oauth2/token
。この場合の「tenant-id」は Azure Active Directory ID です。
コネクタは DataSense 情報を提供するために複数の要求を実行するので、DataSense 接続タイムアウトは 200 秒より長く指定します。
Studio でプロジェクトを実行します。
ブラウザーで localhost:8081
と入力し、デモの選択メニューにアクセスします。
必要に応じて、[Connection Timeout (接続タイムアウト)] と [Read Timeout (読み取りタイムアウト)] を設定します。 [Connection Timeout (接続タイムアウト)] は、サーバーに初めて接続するときのタイムアウトです。 [Read Timeout (読み取りタイムアウト)] は、サーバーからのデータの読み取りを待機するときのタイムアウトです。
<?xml version="1.0" encoding="UTF-8"?> <mule xmlns:dynamics="http://www.mulesoft.org/schema/mule/dynamics" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd http://www.mulesoft.org/schema/mule/dynamics http://www.mulesoft.org/schema/mule/dynamics/current/mule-dynamics.xsd"> <configuration-properties file="mule-artifact.properties" /> <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" > <http:listener-connection host="0.0.0.0" port="8081" /> </http:listener-config> <dynamics:dynamics-config name="Dynamics_365_config" doc:name="Dynamics 365 Dynamics 365" > <dynamics:oauth-user-pass-connection username="${config-oauth-user-pass.username}" password="${config-oauth-user-pass.password}" resource="${config-oauth-user-pass.resource}" clientId="${config-oauth-user-pass.clientId}" clientSecret="${config-oauth-user-pass.clientSecret}" tokenRequestEndpoint="${config-oauth-user-pass.tokenRequestEndpoint}" /> </dynamics:dynamics-config> <flow name="PARSE_DEMO_TEMPLATE"> <http:listener config-ref="HTTP_Listener_config" doc:name="HTTP" path="/"/> <parse-template location="form.html" doc:name="Parse Template"/> </flow> <flow name="CREATE_EMPTY_CONTACT_DEMO"> <http:listener config-ref="HTTP_Listener_config" path="/createContact" doc:name="HTTP"/> <logger message="Requested 'Create Contact Operation'" level="INFO" doc:name="Logger"/> <dynamics:create config-ref="Dynamics_365_config" logicalName="contact" doc:name="Microsoft Dynamics 365"> <dynamics:attributes ><![CDATA[#[{}]]]></dynamics:attributes> </dynamics:create> <logger message="#['Received Response from "Create Contact Operation":' ++ payload]" level="INFO" doc:name="Logger"/> </flow> <flow name="CREATE_EMPTY_OPPORTUNITY_DEMO"> <http:listener config-ref="HTTP_Listener_config" path="/createOpportunity" doc:name="HTTP"/> <logger message="Requested 'Create Opportunity Operation'" level="INFO" doc:name="Logger"/> <dynamics:create config-ref="Dynamics_365_config" logicalName="opportunity" doc:name="Microsoft Dynamics 365"> <dynamics:attributes ><![CDATA[#[{}]]]></dynamics:attributes> </dynamics:create> <logger message="#['Received Response from "Create Opportunity Operation": ' ++ payload]" level="INFO" doc:name="Logger"/> </flow> <flow name="CREATE_ACCOUNT_DEMO"> <http:listener config-ref="HTTP_Listener_config" path="/createAccount" doc:name="HTTP"/> <logger message="Requested 'Create Account Operation'" level="INFO" doc:name="Logger"/> <ee:transform doc:name="Transform Message"> <ee:message> <ee:set-payload> <![CDATA[%dw 2.0 output application/java --- { name: payload.AccountName, creditonhold: payload.CreditOnHold, creditlimit: payload.CreditLimit, "primarycontactid@odata.bind": "/contacts(" ++ payload.ContactID ++ ")" }]]></ee:set-payload> </ee:message> </ee:transform> <dynamics:create config-ref="Dynamics_365_config" logicalName="account" doc:name="Microsoft Dynamics 365"> <dynamics:attributes>#[payload]</dynamics:attributes> </dynamics:create> <logger message="#['Received Response from "Create Account Operation" : ' ++ payload]" level="INFO" doc:name="Logger"/> </flow> <flow name="CREATE_MULTIPLE_ENTITIES_DEMO"> <http:listener config-ref="HTTP_Listener_config" path="/createMultipleAccounts" doc:name="HTTP"/> <logger message="Requested 'Create Multiple Accounts Operation'" level="INFO" doc:name="Logger"/> <ee:transform doc:name="Transform Message"> <ee:message> <ee:set-payload><![CDATA[%dw 2.0 input payload application/json output application/java --- payload map { name: $.AccountName, creditlimit : $.CreditLimit, creditonhold : $.CreditOnHold }]]></ee:set-payload> </ee:message> </ee:transform> <dynamics:create-multiple config-ref="Dynamics_365_config" logicalName="account" doc:name="Microsoft Dynamics 365"> <dynamics:entities-attributes>#[payload]</dynamics:entities-attributes> </dynamics:create-multiple> <logger message="Received Response from 'Create Multiple Entities Operation'" level="INFO" doc:name="Logger"/> <ee:transform doc:name="Response to JSON" > <ee:message > <ee:set-payload ><![CDATA[%dw 2.0 output application/json --- payload]]></ee:set-payload> </ee:message> </ee:transform> </flow> <flow name="UPDATE_ENTITY_DEMO"> <http:listener config-ref="HTTP_Listener_config" path="/updateAccount" doc:name="HTTP"/> <logger message="Requested 'Update Entity Operation'" level="INFO" doc:name="Logger"/> <ee:transform doc:name="Transform Message"> <ee:message> <ee:set-payload><![CDATA[%dw 2.0 output application/java --- { entityId: payload.EntityId, attributes: { creditlimit: payload.CreditLimit, name: payload.AccountName } }]]></ee:set-payload> </ee:message> </ee:transform> <dynamics:update config-ref="Dynamics_365_config" logicalName="account" doc:name="Microsoft Dynamics 365"> <dynamics:attributes>#[payload]</dynamics:attributes> </dynamics:update> <logger message="'Update Entity Operation' has ended with success" level="INFO" doc:name="Logger"/> <ee:transform doc:name="Response to JSON" > <ee:message > <ee:set-payload ><![CDATA[%dw 2.0 output application/json --- payload]]></ee:set-payload> </ee:message> </ee:transform> </flow> <flow name="UPDATE_MULTIPLE_ENTITIES_DEMO"> <http:listener config-ref="HTTP_Listener_config" path="/updateMultipleAccounts" doc:name="HTTP"/> <logger message="Requested 'Update Multiple Entities Operation'" level="INFO" doc:name="Logger"/> <ee:transform doc:name="Transform Message"> <ee:message> <ee:set-payload><![CDATA[%dw 2.0 input payload application/json output application/java --- payload map { entityId: $.EntityId, attributes: { name: $.AccountName } }]]></ee:set-payload> </ee:message> </ee:transform> <dynamics:update-multiple config-ref="Dynamics_365_config" logicalName="account" doc:name="Microsoft Dynamics 365"> <dynamics:entities-attributes>#[payload]</dynamics:entities-attributes> </dynamics:update-multiple> <logger message="Received Response from 'Update Multiple Entities Operation'" level="INFO" doc:name="Logger"/> <ee:transform doc:name="Response to JSON" > <ee:message > <ee:set-payload ><![CDATA[%dw 2.0 output application/json --- payload]]></ee:set-payload> </ee:message> </ee:transform> </flow> <flow name="DELETE_ENTITY_DEMO"> <http:listener config-ref="HTTP_Listener_config" path="/deleteAccount" doc:name="HTTP"/> <logger message="Requested 'Delete Entity Operation'" level="INFO" doc:name="Logger"/> <dynamics:delete config-ref="Dynamics_365_config" logicalName="account" doc:name="Microsoft Dynamics 365"> <dynamics:id>#[payload.EntityId]</dynamics:id> </dynamics:delete> <logger message="'Delete Entity Operation' has ended with success" level="INFO" doc:name="Logger"/> </flow> <flow name="RETRIEVE_ENTITY_DEMO"> <http:listener config-ref="HTTP_Listener_config" path="/retrieveAccount" doc:name="HTTP"/> <logger message="Requested 'Retrieve Entity Operation'" level="INFO" doc:name="Logger"/> <dynamics:retrieve config-ref="Dynamics_365_config" logicalName="account" doc:name="Microsoft Dynamics 365"> <dynamics:id>#[payload.EntityId]</dynamics:id> </dynamics:retrieve> <logger message="Received Response from 'Retrieve Entity Operation'" level="INFO" doc:name="Logger"/> <ee:transform doc:name="Response to JSON" > <ee:message > <ee:set-payload ><![CDATA[%dw 2.0 output application/json --- payload]]></ee:set-payload> </ee:message> </ee:transform> </flow> <flow name="RETRIEVE_ENTITIES_BY_URL_DEMO"> <http:listener config-ref="HTTP_Listener_config" path="/retrieveAccountsByURL" doc:name="HTTP"/> <logger message="Requested 'Retrieve Multiple Operation'" level="INFO" doc:name="Logger"/> <dynamics:retrieve-multiple config-ref="Dynamics_365_config" doc:name="Microsoft Dynamics 365"> <dynamics:data-query-url>${config-oauth-user-pass.resource}/api/data/v8.2/accounts?$select=name,accountnumber&$top=3</dynamics:data-query-url> </dynamics:retrieve-multiple> <logger message="Received Response from 'Retrieve Multiple Operation'" level="INFO" doc:name="Logger"/> <ee:transform doc:name="Response to JSON" > <ee:message > <ee:set-payload ><![CDATA[%dw 2.0 output application/json --- payload]]></ee:set-payload> </ee:message> </ee:transform> </flow> <flow name="RETRIEVE_ENTITIES_BY_QUERY_DEMO"> <http:listener config-ref="HTTP_Listener_config" path="/retrieveAccountsByQuery" doc:name="HTTP"/> <logger message="Requested 'Retrieve Multiple By Query Operation'" level="INFO" doc:name="Logger"/> <dynamics:retrieve-multiple-by-query config-ref="Dynamics_365_config" doc:name="Microsoft Dynamics 365"> <dynamics:query>dsql:SELECT accountid,accountnumber,name FROM accounts LIMIT 2</dynamics:query> </dynamics:retrieve-multiple-by-query> <logger message="Received Response from 'Retrieve Multiple By Query Operation'" level="INFO" doc:name="Logger"/> <ee:transform doc:name="Response to JSON"> <ee:message> <ee:set-payload><![CDATA[%dw 2.0 output application/json --- payload]]></ee:set-payload> </ee:message> </ee:transform> </flow> <flow name="DISASSOCIATE_ENTITIES_DEMO"> <http:listener config-ref="HTTP_Listener_config" path="/disassociateEntities" doc:name="HTTP"/> <logger level="INFO" doc:name="Logger" message="Requested 'Disassociate Entities Operation'"/> <ee:transform doc:name="Transform Message"> <ee:message> <ee:set-payload><![CDATA[%dw 2.0 output application/java --- { entityId: payload.EntityId, attributes: payload.EntityLinkKeys }]]></ee:set-payload> </ee:message> </ee:transform> <dynamics:disassociate config-ref="Dynamics_365_config" logicalName="account" doc:name="Microsoft Dynamics 365"> <dynamics:attributes>#[payload]</dynamics:attributes> </dynamics:disassociate> <logger level="INFO" doc:name="Logger" message="Finished 'Disassociate Entities Operation' with success"/> </flow> <flow name="DO_ACTION_DEMO"> <http:listener config-ref="HTTP_Listener_config" path="/doAction" doc:name="HTTP"/> <logger message="Requested 'Do Action Operation'" level="INFO" doc:name="Logger"/> <ee:transform doc:name="Transform Message"> <ee:message> <ee:set-payload><![CDATA[%dw 2.0 output application/java --- { OpportunityClose: { subject: payload.Subject, "opportunityid@odata.bind": "/opportunities(" ++ payload.OpportunityId ++ ")" }, Status: payload.Status }]]></ee:set-payload> </ee:message> </ee:transform> <dynamics:do-action config-ref="Dynamics_365_config" actionName="WinOpportunity" doc:name="Microsoft Dynamics 365"/> <logger message="Finished 'Do Action Operation'" level="INFO" doc:name="Logger"/> </flow> </mule>
example
Microsoft Dynamics 365 Update 操作を追加します。
必須の論理名 (小文字のスキーマの名前) を指定します。
デフォルトの省略可能な属性を定義します。エンティティ ID は、更新するエンティティインスタンスを示す必須属性です。
指定された属性を使用して取引先を更新します。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/updateAccount
{"EntityId":"<ENTRY_ID>","AccountName":"Updated Name","CreditLimit":1500}
json
<flow name="UPDATE_ENTITY_DEMO">
<http:listener
config-ref="HTTP_Listener_config"
path="/updateAccount"
doc:name="HTTP"/>
<logger
message="Requested 'Update Entity Operation'"
level="INFO"
doc:name="Logger"/>
<ee:transform doc:name="Transform Message">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/java
---
{
entityId: payload.EntityId,
attributes: {
creditlimit: payload.CreditLimit,
name: payload.AccountName
}
}]]>
</ee:set-payload>
</ee:message>
</ee:transform>
<dynamics:update
config-ref="Dynamics_365_config"
logicalName="account"
doc:name="Microsoft Dynamics 365">
<dynamics:attributes>#[payload]</dynamics:attributes>
</dynamics:update>
<logger
message="'Update Entity Operation' has ended with success"
level="INFO"
doc:name="Logger"/>
<ee:transform doc:name="Response to JSON" >
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
payload]]>
</ee:set-payload>
</ee:message>
</ee:transform>
</flow>
xml