將逗號分隔的字串轉換為字串陣列
最後更新: 2025年5月5日
- 適用對象:
- Experience Manager 6.4
- Experience Manager 6.5
- 主題:
- 適用性表單
建立對象:
- 中繼
- 開發人員
當您的表單是以具有字串陣列作為輸入引數的表單資料模型為基礎時,您需要操作提交的調適型表單資料以插入字串陣列。 例如,如果您將核取方塊欄位繫結至字串陣列型別的表單資料模型元素,則核取方塊欄位的資料會採用逗號分隔的字串格式。 下列程式碼範例說明如何將逗號分隔的字串取代為字串陣列。
建立流程步驟
當我們想要工作流程執行特定邏輯時,AEM工作流程會使用流程步驟。 流程步驟可以與ECMA指令碼或OSGi服務相關聯。 我們的自訂流程步驟會執行OSGi服務。
提交的資料採用以下格式。 businessUnits元素的值是以逗號分隔的字串,需要轉換為字串陣列。
與表單資料模型相關聯之rest端點的輸入資料預期的是此熒幕擷取畫面中顯示的字串陣列。 程式步驟中的自訂程式碼會將中提交的資料轉換為正確格式。
我們會將JSON物件路徑和元素名稱傳遞至流程步驟。 處理步驟中的程式碼會將元素的逗號分隔值取代為字串陣列。
請確定最適化表單提交選項中的資料檔案路徑已設為「Data.xml」。 這是因為程式步驟中的程式碼會在裝載資料夾下尋找名為Data.xml的檔案。
處理步驟程式碼
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.jcr.Binary;
import javax.jcr.Node;
import javax.jcr.Session;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.exec.WorkflowProcess;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
@Component(property = {
Constants.SERVICE_DESCRIPTION + "=Create String Array",
Constants.SERVICE_VENDOR + "=Adobe Systems",
"process.label" + "=Replace comma seperated string with string array"
})
public class CreateStringArray implements WorkflowProcess {
private static final Logger log = LoggerFactory.getLogger(CreateStringArray.class);
@Override
public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap arg2) throws WorkflowException {
log.debug("The string I got was ..." + arg2.get("PROCESS_ARGS", "string").toString());
String[] arguments = arg2.get("PROCESS_ARGS", "string").toString().split(",");
String objectName = arguments[0];
String propertyName = arguments[1];
String objects[] = objectName.split("\\.");
System.out.println("The params is " + propertyName);
log.debug("The params string is " + objectName);
String payloadPath = workItem.getWorkflowData().getPayload().toString();
log.debug("The payload in set Elmement Value in Json is " + workItem.getWorkflowData().getPayload().toString());
String dataFilePath = payloadPath + "/Data.xml/jcr:content";
Session session = workflowSession.adaptTo(Session.class);
Node submittedDataNode = null;
try {
submittedDataNode = session.getNode(dataFilePath);
InputStream submittedDataStream = submittedDataNode.getProperty("jcr:data").getBinary().getStream();
BufferedReader streamReader = new BufferedReader(new InputStreamReader(submittedDataStream, "UTF-8"));
StringBuilder stringBuilder = new StringBuilder();
String inputStr;
while ((inputStr = streamReader.readLine()) != null)
stringBuilder.append(inputStr);
JsonParser jsonParser = new JsonParser();
JsonObject jsonObject = jsonParser.parse(stringBuilder.toString()).getAsJsonObject();
System.out.println("The json object that I got was " + jsonObject);
JsonObject targetObject = null;
for (int i = 0; i < objects.length - 1; i++) {
System.out.println("The object name is " + objects[i]);
if (i == 0) {
targetObject = jsonObject.get(objects[i]).getAsJsonObject();
} else {
targetObject = targetObject.get(objects[i]).getAsJsonObject();
}
}
System.out.println("The final object is " + targetObject.toString());
String businessUnits = targetObject.get(propertyName).getAsString();
System.out.println("The values of " + propertyName + " are " + businessUnits);
JsonArray jsonArray = new JsonArray();
String[] businessUnitsArray = businessUnits.split(",");
for (String name: businessUnitsArray) {
jsonArray.add(name);
}
targetObject.add(propertyName, jsonArray);
System.out.println(" After updating the property " + targetObject.toString());
InputStream is = new ByteArrayInputStream(jsonObject.toString().getBytes());
System.out.println("The changed json data is " + jsonObject.toString());
Binary binary = session.getValueFactory().createBinary(is);
submittedDataNode.setProperty("jcr:data", binary);
session.save();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
範例組合可從這裡🔗下載
Experience Manager
- 概觀
- 應遵循的最佳實務
- 使用 AEM Author 設定 OKTA 驗證
- 建立您的第一個自適應表單
- 處理表單提交
- 實用整合
- 建立 OSGi 套件組合
- 自適應表單
- 在 Windows 上安裝 AEM Forms
- 在 Linux 上安裝 32 位元套件
- 自適應表單中的預填服務
- 使用查詢參數填入自適應表單內容
- AEM Forms 中的 QR 碼
- 自適應表單中的自訂提交
- 自適應表單中的驗證碼
- 規則編輯器中的自訂函數
- 在網頁中嵌入自適應表單
- 建立字串陣列
- AEM Forms 中的項目載入路徑
- 在 OSGI 工作流程中使用 XML 內的設定值
- 在 OSGI 工作流程中使用 JSON 內的設定值
- 在 AEM Forms 工作流程中傳送電子郵件元件
- 使用 API 產生 DocumentOfRecord
- 顯示內嵌影像
- 以內嵌方式顯示 DAM 影像
- 使用地理位置 API
- 使用交易報告
- AEM Forms 中的使用者輪廓資料整合
- Microsoft Dynamics 與 AEM Forms
- 規則編輯器增強功能
- 限制規則編輯器存取權
- 主題編輯器增強功能
- 表單編輯器增強功能
- 自適應表單的自動化測試
- 自適應表單的自動化測試
- 將 LDAP 與 AEM Forms 進行整合
- 在 AEM Forms 中運用服務使用者
- 在自適應表單提交時標記和儲存記錄文件
- 將表單資料模型服務叫用的結果填入表格
- 擷取工作流程註解
- 將已提交的表單資料儲存在資料庫中
- 在資料庫中插入表單附件
- 修改資料來源設定
- 覆寫表單資料模型屬性
- AEM 6.4 工作流程中的表單資料模型服務
- 處理表單資料模型服務步驟中的錯誤訊息
- AEM 6.5.1 工作流程中的表單資料模型服務
- 無資料來源的表單資料模型
- 經計算的表單資料模型元素
- 在 AEM Forms 中設定 JDBC 資料來源
- 以 JDBC 為基礎的表單資料模型
- 在表單資料模型中建立 2 個實體間的關聯
- 在規則編輯器中使用表單資料模型的叫用服務
- 使用表單資料模型將二進位資料發佈至 AEM DAM
- 建立可重複使用的工作流程模型
- 自訂程序步驟 AEM 工作流程
- 預填 HTML5 表單
- 表單資料模型與 Salesforce
- 在選擇元件中動態新增項目
- 使用聊天機器人填寫 PDF 表單
- 以核心元件為基礎的表單
- 選取及組裝 DAM 資料夾內容
- 使用表單資料模型預填自適應表單
- 使用者介面秘訣與技巧
- 自訂收件匣
- 電子郵件表單附件
- 使用資料及附件預填表單
- 儲存與擷取自適應表單
- 從 PDF 檔案匯入資料
- 以 CSV 格式匯出提交的資料
- HTML5 表單
- AEM Forms 與 Acrobat Sign
- 簽署多個表單
- 自訂工作流程步驟
- 自訂工作流程元件
- AEM 工作流程中的變數
- 檢閱表單資料
- 在 MySQL 資料庫中儲存與擷取表單資料
- 提交 PDF 表單時觸發 AEM 工作流程
- 提交行動表單時觸發 AEM 工作流程
- 查詢表單提交
- 在表單入口中列出自訂資產類型
- AEM Forms 與 Marketo
- AEM Forms 與 Adobe Campaign Standard
- 歡迎套件
- 無周邊表單 API
- React 應用程式與 Forms 和 Acrobat Sign
- 文件服務
- PDF 表單類型
- 在自適應表單內嵌入 PDF
- PDF 輪播元件
- 在 AEM Forms 中使用組裝服務
- 透過組裝服務進行 XDP 拼接
- 在 AEM Forms 中使用受監看的資料夾
- 在 AEM Forms 中使用條碼服務
- 在 AEM Forms 中使用 PDFG 服務
- 使用權限密碼加密 PDF
- 在 AEM Forms 中使用 Output 和 Forms 服務
- 在 Output 服務中使用 xdp 片段
- 使用 ECMA 指令碼產生含有片段的 PDF
- 從一個資料檔案產生多個 PDF
- 提交行動表單時產生 PDF
- 提交以核心元件為基礎的表單時產生 PDF
- 從行動表單產生互動式 PDF
- 從自適應表單產生互動式記錄文件
- 設定 Reader 延伸模組認證
- 進行 XDP 轉譯時將使用權套用至 PDF
- 將使用權套用至上傳的 PDF
- 認證文件
- 組裝表單附件
- 實用的公用程式服務
- Forms Designer
- AEM Forms Workbench
- 列印管道的互動式通訊
- 儲存及擷取信件草稿
- 互動式通訊
- Web 管道的互動式通訊
- 疑難排解
- 文件服務:針對 DDX 相關問題進行疑難排解的步驟
- 文件服務:針對 PDFA 轉換問題進行疑難排解的步驟
- 文件服務:如何針對 Forms 和 Output 服務的字型相關問題進行偵錯
- 文件服務:如何為 Forms 和 Output 服務嵌入字型
- 文件服務:如何啟用效能記錄以針對 Forms 和 Output 服務進行偵錯
- 文件服務:如何增加大型檔案轉換作業的 aries 交易逾時時間
- 文件服務:如何使用 FormsIVS 和 OutputIVS 執行負載測試
- 文件服務:如何在 FormsIVS 和 OutputIVS 中更新自訂的 XDP 和資料檔案
- 文件服務:啟用詳細 ORB 追蹤的步驟
- 文件服務:調整 XMLFormService 之 bmc 集區大小的步驟 (第 1 部分)
- 文件服務:調整 XMLFormService 之 bmc 集區大小的步驟 (第 2 部分)
- 文件服務:在 JMX 主控台上調整參數的步驟
- 讓大型 XML 資料檔案能夠與範本合併
- PDFG:如何變更 PDFG 中的交易逾時
- PDFG:如何更新 PDFG 中的 CORBA 逾時
- PDFG:如何更新 PDFG 中的逾時
- PDFG:在 Windows Server 2016 中新增 PDFG 使用者的步驟
- PDFG:查看與安裝 32 位元資料庫及其相依性的步驟
- PDFG:確認 Windows Server 2016 上資料夾權限的步驟
- PDFG:在 Unix 上啟用 Strace 的步驟
- PDFG:安裝必要之 32 位元 Microsoft Visual C++ 可轉散發套件的步驟
- PDFG:運作及解讀 System Readiness Tool 之輸出的步驟
- PDFG:針對 Acrobat 特定問題進行疑難排解的步驟
- PDFG:針對 Windows 上 HtmltoPDF 問題進行疑難排解的步驟
- PDFG:針對 Unix (PhantomJS) 上 HtmltoPDF 特定問題進行疑難排解的步驟
- PDFG:針對 Unix (WebKit 轉換) 上 HtmltoPDF 特定問題進行疑難排解的步驟
- PDFG:針對 Unix 上多使用者 PDFG 轉換進行疑難排解的步驟
- PDFG:針對 Windows 上多使用者 PDFG 轉換進行疑難排解的步驟
- PDFG:針對 Unix 上 OpenOffice 特定問題進行疑難排解的步驟
- PDFG:針對 Windows 上 OpenOffice 特定問題進行疑難排解的步驟
- 文件安全性:如何套用使用 Acrobat 的文件安全性模組所建立的原則
- 使用者管理:如何在 AEM Forms JEE 中新增使用者或群組
- 使用者管理:如何增加 UM 工作階段逾時時間
- Workbench:使用 https 連線至 Workbench
- Workbench:從說明選單收集 Workbench 記錄
- Workbench:如何啟用 Workbench 的偵錯輸出
- Workbench:如何調整 Workbench 記憶體參數
- Workbench:如何調整 Workbench 效能參數
- Designer:Designer 對於 C++ 可轉散發套件的相依性
- Designer:如何啟用 HTML 預覽
- Designer:如何啟用 PDF 預覽
- Designer:如何安裝 Designer 修補程式
- JEE Foundation:如何變更熵的值
- JEE Foundation:如何變更 AEM Forms JEE 中任何服務的交易逾時
- JEE Foundation:如何從作業管理員表格中清除流程記錄
- JEE Foundation:如何從命令列執行流程清除
- JEE Foundation:手動啟動的步驟
- JEE Foundation:擷取行動表單偵錯記錄的步驟
- JEE Foundation:減輕 ForcedDisconnectException 的步驟
- 一般:如何新增 JBoss Admin Console 的管理使用者
- 一般:如何擷取 HAR 記錄
- 一般:如何在 Unix 伺服器上擷取 JVM 的堆積傾印
- 一般:如何在 Windows 伺服器上擷取 JVM 的堆積傾印
- 一般:如何擷取網路記錄
- 一般:如何在 Unix 伺服器上擷取 JVM 的執行緒傾印
- 一般:如何在 Windows 伺服器上擷取 JVM 的執行緒傾印
- 一般:如何產生自我簽署憑證
- 一般:如何從 HTML5 表單進行網頁服務呼叫
- 一般:針對 AEM Forms OSGI 中任何類別啟用偵錯記錄的步驟
- 一般:針對 JBOSS 應用程式伺服器中任何類別啟用偵錯記錄的步驟
- 一般:針對 Websphere 應用程式伺服器中任何類別啟用偵錯記錄的步驟
- 一般:針對 AEM Forms OSGi 啟用 SSL 的步驟
- 一般:加密 keystore 密碼以在 lc_turnkey.xml 中使用的步驟
- 一般:在 AEM Forms JEE 中重設使用者預設密碼的步驟
- 一般:在 AEM Forms OSGI 中重設使用者預設密碼的步驟
- 一般:在叢集中設定 gemfire 定位器及執行相關設定的步驟