問題
- API: http://localhost:8080/o/headless-admin-workflow/v1.0/workflow-tasks/assigned-to-me が実行されるたびに、コンソールに複数のロガーが表示され、これが毎回実行されていることを示している。
Environment
- Liferay DXP 7.4
解決策
-
これは期待された動作である。というのも、前述のエンドポイントへのリクエストを実行するとき、レスポンス内のアクションを取得して、 HATEOASを提供する必要があるからである。そのため、このユーザー(この場合はuser1)に対してそのようなアクションが利用可能かどうかを知るために、タスクの担当者(または担当者候補)を取得する。この場合、この情報を知るためにスクリプトを評価する必要があり、これが5回実行している理由である。
また、ユーザーがコードを理解したい場合は、 この と このを参照してください。
さて、以下は多くのログを回避するのに役立つステップである:
ここでユーザーは、スクリプト化された割り当てによって取得された最初の情報を保存するための有効期限を定義することができます。Navigate to Control Panel > System Settings > CONTENT AND DATA > Workflow > Workflow Task Script
追加情報
- テストのためのステップ:
- DXP 7.4 アップデートの開始 86
- 新しいユーザー "user1 "を作成し、システム内に2人のユーザー(testとuser1)を持つようにする。
- アプリケーションに移動する> ワークフロー> プロセス・ビルダー
- 提供された .XMLを追加して、新しいワークフローを追加する。
<?xml version="1.0"?>
<workflow-definition
xmlns="urn:liferay.com:liferay-workflow_7.4.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:liferay.com:liferay-workflow_7.4.0 http://www.liferay.com/dtd/liferay-workflow-definition_7_4_0.xsd"
>
<version>17</version>
<state>
<name>668db35c-b4b4-4317-bfc9-61305beb094d</name>
<description>Begin a workflow.</description>
<metadata>
<![CDATA[
{
"xy": [
-69,
87
]
}
]]>
</metadata>
<initial>true</initial>
<labels>
<label language-id="en_US">
Start
</label>
</labels>
<transitions>
<transition>
<labels>
<label language-id="en_US">
Transition Label
</label>
</labels>
<name>b261d801-9ee4-4f82-983a-6148137128bd</name>
<target>6acf1f13-c895-4904-a2e7-9c68e6d9c045</target>
<default>true</default>
</transition>
</transitions>
</state>
<state>
<name>822e1b6b-fec6-4b9e-849c-579b8f5914b4</name>
<description>Conclude the workflow.</description>
<metadata>
<![CDATA[
{
"xy": [
624.1597166683956,
348.18265251631755
],
"terminal": true
}
]]>
</metadata>
<labels>
<label language-id="en_US">
End
</label>
</labels>
</state>
<task>
<name>6acf1f13-c895-4904-a2e7-9c68e6d9c045</name>
<description>Ask a user to work on the item.</description>
<metadata>
<![CDATA[
{
"xy": [
332.903564453125,
116.55914306640625
]
}
]]>
</metadata>
<assignments>
<scripted-assignment>
<script>
<![CDATA[
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.service.UserLocalServiceUtil;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
Log LOGGER = LogFactoryUtil.getLog(User.class);
long companyId = GetterUtil.getLong((String) workflowContext.get(WorkflowConstants.CONTEXT_COMPANY_ID));
LOGGER.info("added-task");
println("user");
User l1User = UserLocalServiceUtil.getUserByScreenName(companyId, "user1");
users = new ArrayList<>();
LOGGER.info("added-task011");
users.add(l1User);
]]>
</script>
<script-language>groovy</script-language>
</scripted-assignment>
</assignments>
<labels>
<label language-id="en_US">
Task
</label>
</labels>
<transitions>
<transition>
<labels>
<label language-id="en_US">
Transition Label
</label>
</labels>
<name>fe0273df-7cc7-4bbc-a8fd-40037a6db5bd</name>
<target>822e1b6b-fec6-4b9e-849c-579b8f5914b4</target>
<default>true</default>
</transition>
</transitions>
</task>
</workflow-definition>-
情報 レベルでカテゴリーを追加:
com.liferay.portal.kernel.model.User
user1 に割り当てられたワークフロー時のロガーを取得する。 - 次に、コントロールパネル> 「オブジェクト」に移動し、「テキスト」タイプのカスタムフィールドを1つ持つオブジェクトを1つ作成する。
- Applications> Workflow> Process Builder> Workflows>Configuration に移動し、作成されたオブジェクトに対してこの作成されたワークフローを有効にします。
- ページに移動し、オブジェクト・ウィジェットを追加して、この動作をテストする。
- ここでオブジェクトが作成されると、保留状態になり、コンソールでロガーを確認できる。
アウトカム: ワークフローがトリガーされると、コンソールにハードコードされたメッセージとログが表示されます。
- localhost:8080/o/api にアクセスし、ヘッドレスAPIを取得する: http://localhost:8080/o/headless-admin-workflow/v1.0/workflow-tasks/assigned-to-me
- ユーザ名: user1@gmail.com, パスワード: test (私のローカルと同じ)
- リクエスト(Get: http://localhost:8080/o/headless-admin-workflow/v1.0/workflow-tasks/assigned-to-me)を送信すると、200ステータスのレスポンスが返ってきます。
成果: このAPIを実行するたびに、コンソールに複数のロガーが表示される。あるいは、このタスクがすでにuser1に割り当てられているにもかかわらず、呼び出しのたびにコンソールにハードコードされたメッセージが表示される。