يعلّمك هذا الدليل السريع كيفية إنشاء خطوة مخصّصة في Workspace Flows باستخدام "برمجة تطبيقات Google". تتلقّى الخطوة المخصّصة رقمَين وعملية حسابية كمدخلات، وتُجري العملية الحسابية، ثم تعرض النتيجة.
الأهداف
- إنشاء خطوة مخصّصة في Workspace Flows باستخدام Google Apps Script
- نشر الخطوة المخصّصة في مؤسسة Google Workspace الخاصة بك
- اختبِر خطوة سير العمل المخصّصة في Workspace Flows.
المتطلبات الأساسية
- حساب Google لديه إذن الوصول إلى Workspace Flows من خلال برنامج Gemini Alpha
إعداد النص البرمجي
لإعداد النص البرمجي، أنشئ مشروعًا جديدًا في "برمجة تطبيقات Google"، ثم اربطه بمشروعك على السحابة الإلكترونية.
انقر على الزر التالي لفتح مشروع بدء سريع لآلة حاسبة "المخططات" في "برمجة تطبيقات Google".
انقر على نظرة عامة.
في صفحة النظرة العامة، انقر على
إنشاء نسخة.
أدخِل اسمًا لنسخة مشروع "برمجة التطبيقات Google":
انقر على نسخة من أداة حساب التدفقات، دليل البدء السريع.
في عنوان المشروع، اكتب
Flows calculator quickstart.انقر على إعادة تسمية.
اختياري: مراجعة رمز التشغيل السريع
في القسم السابق، نسخت مشروعًا كاملاً من Apps Script يحتوي على جميع رموز التطبيق المطلوبة لخطوة سير العمل المخصّصة، لذا ليس عليك نسخ كل ملف ولصقه.
يمكنك مراجعة كل ملف نسخته في القسم السابق هنا:
appsscript.jsonملف البيان ملف JSON خاص يحدّد معلومات أساسية عن المشروع تحتاجها "برمجة تطبيقات Google" لتشغيل النص البرمجي.
عرض رمز
appsscript.json{ "timeZone": "America/Los_Angeles", "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8", "addOns": { "common": { "name": "Calculator", "logoUrl": "https://www.gstatic.com/images/branding/productlogos/calculator_search/v1/web-24dp/logo_calculator_search_color_1x_web_24dp.png", "useLocaleFromApp": true }, "flows": { "workflowElements": [ { "id": "actionElement", "state": "ACTIVE", "name": "Calculate", "description": "Asks the user for two values and a math operation, then performs the math operation on the values and outputs the result.", "workflowAction": { "inputs": [ { "id": "value1", "description": "value1", "cardinality": "SINGLE", "dataType": { "basicType": "INTEGER" } }, { "id": "value2", "description": "value2", "cardinality": "SINGLE", "dataType": { "basicType": "INTEGER" } }, { "id": "operation", "description": "operation", "cardinality": "SINGLE", "dataType": { "basicType": "STRING" } } ], "outputs": [ { "id": "result", "description": "Calculated result", "cardinality": "SINGLE", "dataType": { "basicType": "INTEGER" } }, { "id": "log", "description": "Logged result of flow event.", "cardinality": "SINGLE", "dataType": { "basicType": "STRING" } } ], "onConfigFunction": "onConfigCalculateFunction", "onExecuteFunction": "onExecuteCalculateFunction" } } ] } } }
Calculator.gsتحدّد هذه السمة خطوة مخصّصة في Google Workspace Flows. تتلقّى الخطوة، التي تحمل الاسم "حساب"، رقمَين وعملية كمدخلات وتعرض نتيجة الحساب.
عرض رمز
Calculator.gs/** * This script defines a custom step for Google Workspace Flows. * The step, named "Calculate", takes two numbers and an operation as input * and returns the result of the calculation. * * The script includes functions to: * * 1. Define the configuration UI for the step using Card objects: * * - `onConfigCalculateFunction()`: Generates the main configuration card. * - Helper functions like `pushCard()`, `saveButton()` to build card components. * * 2. Handle the execution of the step. * * - `onExecuteCalculateFunction()`: Retrieves inputs, performs the calculation, * and returns outputs. * * To learn more, see the following quickstart guide: * https://developers.google.com/workspace/add-ons/workflows/quickstart */ /** * Creates an action response to push a new card onto the card stack. * * This function generates an action object that, when returned, causes the * provided card to be pushed onto the card stack, making it the currently * displayed card in the configuration UI. * @param {Object} card The Card object to push. * @return {Object} The action response object. */ function pushCard(card) { return { "action": { "navigations": [{ "push_card": card } ] } }; } /** * Creates an action response to update the currently displayed card. * * This function generates an action object that, when returned, causes the * currently displayed card to be replaced with the provided card in the * configuration UI. * @param {Object} card The Card object to update. * @return {Object} The render actions object. */ function updateCard(card) { return { "render_actions": { "action": { "navigations": [{ "update_card": card } ] } } }; } /** * Creates a button configuration object for saving the workflow. * * This function generates a button definition that, when clicked, triggers * a save action for the current workflow configuration. * @return {Object} The button widget object. */ function saveButton() { return { "text": "Save", "onClick": { "hostAppAction" : { "workflowAction" : { "saveWorkflowAction" : {} } } }, }; } /** * Creates a button configuration object for a refresh action. * * This function generates a button definition that, when clicked, triggers * a function to refresh the current card. * @param {string} functionName The name of the Apps Script function to call on click. * @return {Object} The button widget object. */ function refreshButton(functionName) { return { "text": "Refresh", "onClick": { "action" : { "function" : functionName } }, }; } /** * Generates and displays a configuration card for the sample calculation action. * * This function creates a card with input fields for two values and a dropdown * for selecting an arithmetic operation. The card also includes a "Save" * button to save the action configuration for the workflow. * * The input fields are configured to let the user select outputs from previous * workflow steps as input values using the `hostAppDataSource` property. * This function is called when the user adds or edits the "Calculate" step in the Flows UI. * @return {Object} The action response object containing the card to display. */ function onConfigCalculateFunction() { var card = { "sections": [ { "header": "Action sample: Calculate", "widgets": [ { "textInput": { "name": "value1", "label": "First value", "hostAppDataSource" : { "workflowDataSource" : { "includeVariables" : true } } } }, { "selectionInput": { "name": "operation", "label": "Operation", "type": "DROPDOWN", "items": [ { "text": "+", "value": "+", }, { "text": "-", "value": "-", }, { "text": "x", "value": "x", }, { "text": "/", "value": "/", } ] } }, { "textInput": { "name": "value2", "label": "Second value", "hostAppDataSource" : { "workflowDataSource" : { "includeVariables" : true } } } } ] } ] }; return pushCard(card); } /** * Gets an integer value from variable data, handling both string and integer formats. * * This function attempts to extract an integer value from the provided variable data. * It checks if the data contains string values and, if so, parses the first string * as an integer. If integer values are present, it returns the first integer. * @param {Object} variableData The variable data object from the event. * @return {number} The extracted integer value. */ function getIntValue(variableData) { if (variableData.stringValues) { return parseInt(variableData.stringValues[0]); } return variableData.integerValues[0]; } /** * Executes the calculation action based on the inputs from a workflow event. * * This function retrieves input values ("value1", "value2") and the "operation" * from the workflow event, performs the calculation, and returns the "result" and * "log" as output variables. * This function is called when the workflow execution reaches this custom step. * @param {Object} event The event object passed by the Flows runtime. * @return {Object} The output variables object. */ function onExecuteCalculateFunction(event) { console.log("output: " + JSON.stringify(event)); var calculatedValue = 0; var value1 = getIntValue(event.workflow.actionInvocation.inputs["value1"]); var value2 = getIntValue(event.workflow.actionInvocation.inputs["value2"]); var operation = event.workflow.actionInvocation.inputs["operation"].stringValues[0]; if (operation == "+") { calculatedValue = value1 + value2; } else if (operation == "-") { calculatedValue = value1 - value2; } else if (operation == "x") { calculatedValue = value1 * value2; } else if (operation == "/") { calculatedValue = value1 / value2; } var renderAction = { "hostAppAction" : { "workflowAction" : { "returnOutputVariablesAction" : { "variableValues" : [ { "variableId": "result", "integerValues": [ calculatedValue ] } ] } } } }; }
نشر خطوتك واختبارها
لاختبار خطوتك، عليك إعداد عملية نشر تجريبية للإضافة، وإضافة الخطوة إلى مسار، ثم تشغيل المسار.
إعداد عملية نشر تجريبية للإضافة:
- افتح مشروع البرنامج النصي في محرّر Apps Script.
- انقر على نشر > اختبار عمليات النشر.
- انقر على تثبيت.
- في أسفل الصفحة، انقر على تم.
يمكنك السماح لمستخدمين آخرين باختبار الإضافة من خلال مشاركة مشروع Apps Script مع حساباتهم (يجب منحهم إذن التعديل). بعد ذلك، اطلب من المستخدمين اتّباع الخطوات السابقة.
بعد تثبيت الوظيفة الإضافية، ستتوفّر على الفور في "سير العمل". قد تحتاج إلى إعادة تحميل Flows قبل ظهور الإضافة. يجب أيضًا تفويض الإضافة قبل استخدامها.
لمزيد من المعلومات عن عمليات النشر التجريبية، اطّلِع على مقالة تثبيت إضافة غير منشورة.
فتح "المخططات"
أنشئ تدفقًا يتضمّن خطوتك:
- انقر على مخطط جديد.
- اختَر طريقة بدء المسار. عند اختبار خطوة، اختَر إجراء تفعيل يمكنك تنفيذه بنفسك، مثل إرسال رسالة إلكترونية إلى نفسك. إذا كانت خطوتك تتطلّب متغيّر إدخال، اضبط متغيّر الإدخال كجزء من ناتج المشغّل.
- انقر على إضافة خطوة. اختَر الخطوة التي أنشأتها أو عدّلتها، والتي تُسمى الحساب.
- اضبط خطوتك. بالنسبة إلى خطوة الحساب، اختَر قيمتَين وعملية حسابية. يتم حفظ الخطوة تلقائيًا.
- لاختبار ناتج الخطوة، أضِف خطوة أخرى. على سبيل المثال، لإضافة ناتج إلى رسالة إلكترونية، يمكنك إضافة خطوة إرسال رسالة في Gmail. في الرسالة، انقر على المتغيرات واختَر ناتج الخطوة. بالنسبة إلى خطوة "الحساب"، اختَر المتغيرات > الخطوة 2: النتيجة المحسوبة > النتيجة المحسوبة. يظهر المتغيّر على شكل شريحة في حقل الرسالة.
- انقروا على تفعيل. أصبح مسار العمل جاهزًا للتنفيذ.
شغِّل السلسلة من خلال تفعيل إجراء التفعيل. على سبيل المثال، إذا كان مسارك يبدأ عند تلقّي رسالة إلكترونية، أرسِل رسالة إلكترونية إلى نفسك.
تأكَّد من أنّ المسار يعمل على النحو المتوقّع. يمكنك الاطّلاع على السجلات من خلال الانتقال إلى علامة التبويب النشاط في "أداة إنشاء سير العمل". لمعرفة كيفية إنشاء سجلّات مخصّصة في علامة التبويب "النشاط"، اطّلِع على سجلّات الأنشطة.
الخطوات التالية
لقد أنشأت خطوة سير عمل مخصّصة واختبرتها بنجاح في Workspace Flows. ويمكنك الآن:
واصِل تخصيص الخطوة من خلال الطلب من Gemini مساعدتك في تنفيذ منطق أكثر تعقيدًا.
إنشاء بطاقة إعداد لتخصيص إعدادات الخطوات
تسجيل الأنشطة والأخطاء لتسجيل عمليات تنفيذ الخطوات وتحديد المشاكل وحلّها
مراجعة عناصر أحداث سير العمل لمراجعة حِمل JSON الذي ترسله وتتلقّاه عمليات سير العمل أثناء تنفيذها