< All Topics
Print

שימוש במדיאטור Iterate

כאשר נדרש לרוץ על רשימת אובייקטים שאנו מקבלים ב-Payload ולבצע כל פעולה שאינה מצריכה שינוי ב-Payload עצמו – נרצה להשתמש במדיאטור שנקרא Iterate.
זאת בניגוד למדיאטור של foreach, דרכו ניתן לרוץ על אובייקטים ולשנות את ה-payload עצמו בלבד.
נראה דוגמה עם Payload שאנו מקבלים –

'{
    "Signers": {
        "Signer": [
            {
                "employeePositionScope": "0.5",
                "employeeJobScope": "1",
                "employeeFirstName": "ששון",
                "employeeLastName": "גבאי",
                "employeeWeeklyHours": "40",
                "employeePhoneNumber": "0520000000",
                "employeeProfessionalLevel": "7",
                "employeeEmail": "[email protected]",
                "employeeId": "123456789",
                "employeeCity": "הוד השרון",
                "employeeWeeklyDays": "5",
                "employeeEducationInstitute": "מכללת ייל"
            },
            {
                "employeePositionScope": "0.8",
                "employeeJobScope": "1.1",
                "employeeFirstName": "ישראל",
                "employeeLastName": "ישראלי",
                "employeeWeeklyHours": "48",
                "employeePhoneNumber": "0540000000",
                "employeeProfessionalLevel": "3",
                "employeeEmail": "[email protected]",
                "employeeId": "234567890",
                "employeeCity": "כפר סבא",
                "employeeWeeklyDays": "6",
                "employeeEducationInstitute": "מכללת אורט"
            }
        ]
    }
}'

בדוגמה לעיל נוכל לראות שני אובייקטים שנמצאים בתוך ה-jSON, כל אובייקט מכיל את אותם השדות עם נתונים אחרים.
כעת, על מנת שנוכל לרוץ על כל אובייקט בנפרד ולבצע פעולות כאלו ואחרות, נשתמש במדיאטור של iterate.

<iterate expression="json-eval($.Signers.Signer)" id="DataRows">
			    <target>
			        <sequence>
			            <property expression="//employeeFirstName/text()" name="employeeFirstName" scope="default" type="STRING"/>
			            <property expression="//employeeLastName/text()" name="employeeLastName" scope="default" type="STRING"/>
			            <property expression="//employeeId/text()" name="employeeId" scope="default" type="STRING"/>
			            <property expression="//employeeEmail/text()" name="employeeEmail" scope="default" type="STRING"/>
			            <property expression="//employeeEducationInstitute/text()" name="employeeEducationInstitute" scope="default" type="STRING"/>
			            <property expression="//employeeCity/text()" name="employeeCity" scope="default" type="STRING"/>
			            <property expression="//employeeProfessionalLevel/text()" name="employeeProfessionalLevel" scope="default" type="STRING"/>
			            <property expression="//employeePositionScope/text()" name="employeePositionScope" scope="default" type="STRING"/>
			            <property expression="//employeeWeeklyHours/text()" name="employeeWeeklyHours" scope="default" type="STRING"/>
			            <property expression="//employeeWeeklyDays/text()" name="employeeWeeklyDays" scope="default" type="STRING"/>
			            <property expression="//employeeJobScope/text()" name="employeeJobScope" scope="default" type="STRING"/>
			            <property expression="//employeePhoneNumber/text()" name="employeePhoneNumber" scope="default" type="STRING"/>
			            <sequence key="dhContinuousEmploymentPayload"/>
			            <sequence key="dhCreateFlowFromTemplate"/> 
			        </sequence>
			    </target>
			</iterate>

שימו לב כי בהגדרת ה-iterate, כדי להגיע לאובייקטים בדוגמה שקיבלנו ב-payload לעיל, צריך להגדיר את כל הנתיב – כלומר תחת Signers ואז תחת Signer.
כעת נשמור את כל ה-Properties שרלוונטים לפרויקט שלנו ובסיום נצא החוצה ל-Sequences אחרים שמבצעים פעולות כלשהן. (במקרה שלנו, יציאה ל-Sequence שנקרא 'dhContinuousEmploymentPayload' מבצע הכנה של ה-payload החדש עבור שליחה ל-Doxi, וה-Sequence שנקרא'dhCreateFlowFromTemplate' מבצע הפעלה של השימוש במתודה createFlowFromTemplate ב-Doxi.

תוכן עיניינים