كيفية إنهاء tLoop عند الوصول إلى المعايير المطلوبة

StackOverflow https://stackoverflow.com//questions/25041657

  •  21-12-2019
  •  | 
  •  

سؤال

هنا هي عمليتي:

Job Layout and tJava_1 configuration

يمكنك رؤية كود Java في tJava_1.يقوم بتوزيع البيانات من الملف وإذا وصلت إلى صفحة البحث الأخيرة، فسيتم تعيين القيمة على "صحيح".من المفترض أن يكون هذا هو معيار التوقف لـ tLoop_1، كما هو موضح هنا:

tLoop configuration

هل أتعامل مع متغيرات Talend بشكل خاطئ؟كيف يمكنني إيقاف تشغيل الحلقة بمجرد وصولي إلى المعايير الموجودة في كود Java الخاص بي؟

هل كانت مفيدة؟

المحلول

لا تحتاج إلى قيم "الإعلان" أو "التكرار".ما تريده هو متغير في "الشرط" وهو قيمة منطقية يتم تقييمها true وتم ضبطه على false عندما تريد إنهاء الحلقة.

تنص أفضل الممارسات على أنه يجب عليك استخدام متغيرات السياق للسياقات الفعلية المتوفرة لوظيفة إما في وقت التشغيل أو عند بدء وظيفة فرعية ثم استخدام globalMap للمتغيرات المتاحة عالميًا عبر وظيفة واحدة.

لذلك في هذه الحالة، يجب عليك تهيئة متغير globalMap منطقي مضبوط على true (يمكنك القيام بذلك في مكون tJava باستخدام globalMap.put("loop",true) أو استخدم مكون tSetGlobalVar) ثم في tJavaRow يمكنك تعيين متغير globalMap على false باستخدام globalMap.put("loop",false).

إذا كنت ستستخدم "loop" كمتغير globalMap الخاص بك، فستستخدمه ((Boolean)globalMap.get("loop")) في "حالتك" في tLoop.

قد يبدو المثال البسيط العملي على ذلك كما يلي:

While loop job layout

أولاً قمنا بتعيين متغير الحلقة على true كما نريدها أن تبدأ على الأقل!

tSetGlobalVar configuration

ثم قمنا بتعيين شرط الحلقة while على المتغير الشامل المنطقي:

tLoop configuration

ثم أخيرًا نقوم بتشغيل بعض التعليمات البرمجية في مكون tJava الذي يقوم بشيء ما ويعين المتغير العام بشكل مشروط إلى false، مما يؤدي إلى إنهاء الحلقة:

if (((Integer)globalMap.get("tLoop_2_CURRENT_ITERATION")) == 3) {
    globalMap.put("loop", false);
} else {
    System.out.println(((Integer)globalMap.get("tLoop_2_CURRENT_ITERATION")));
};
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top