اسم الملف المرن / كتابة ملفات متعددة

بشكل افتراضي، تتم كتابة البيانات في اسم الملف المحدد في معلمة الدفعة. يدعم اسم الملف العديد من متغيرات الاستبدال الديناميكية كما هو محدد في الوصف التفصيلي لمعلمة مجموعة المعالجة في التحكم في مجموعة معالجة نموذج الاستخراج المستند إلى الخوارزمية المساعدة (F1-PDBEX). ارجع أيضًا إلى معالجة سجل الاستخراج للحصول على معلومات حول اسم الملف والعمليات ذات سلاسل العمليات المتعددة.

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

  • الاستخراج مخصص للبيانات المرتبطة بمزودي خدمة متعددين حيث يجب على كل مزود خدمة استلام الملف الخاص به. في حالة الاستخدام هذه، تكون وحدة العمل هي مزود الخدمة بحيث يتم إنتاج ملف لكل وحدة عمل.
  • يعمل التنفيذ مع جهات اختصاص متعددة تمثلها شعبة خدمة معلومات العملاء. يجب أن ينتج عن عملية استخراج معينة ملف لكل قسم بحيث يحصل كل قسم على بياناته ذات الصلة فقط.
  • يجب أن يفصل استخراج معلومات الشخص بيانات الشخص الفردية عن بيانات شخص العمل. بالإضافة إلى ذلك، يجب أن ينتج عن معلومات الاتصال الخاصة بكل شخص ملف منفصل. في حالة الاستخدام هذه، تتضمن وحدة عمل واحدة بيانات يجب كتابتها في أكثر من ملف.

لدعم حالات الاستخدام المذكورة أعلاه، تدعم خوارزمية "معالجة السجل" إرجاع اسم الملف في المخرجات:

  • يتم تضمين اسم الملف في مجموعة طبعات مخطط المخرجات. يمكنك ملء هذا إذا كنت تريد أن تنتقل بيانات إدخال مخطط معين إلى اسم هذا الملف. في مثال استخراج بيانات الشخص أعلاه، يشير المخطط الذي يتضمن معلومات الاتصال إلى ملف الاتصال المحدد.
  • اسم الملف هو حقل مخرجات خارج قائمة المخططات. يمكنك ملء هذا إذا لم يكن لديك ملفات مختلفة لمخططات مختلفة ولكنك لا تزال تريد تجاوز اسم الملف المحدد في معلمة الدفعة. ستقوم أمثلة القسم وموفر الخدمة أعلاه بملء هذه المعلمة باسم الملف المطلوب. يمكن أن يقوم مثال استخراج بيانات الشخص بملء هذا الحقل لكل المعلومات بدون اتصال.

تقوم عملية مجموعة المعالجة بالتحقق من المخرجات بعد كل استدعاء لخوارزمية معالجة السجلات. بالنسبة لكل مخطط قاعدة بيانات، في حالة وجود اسم ملف محدد مقترن بمخطط قاعدة البيانات، تتم كتابة بيانات هذا المخطط في هذا الملف. بخلاف ذلك، إذا تم توفير اسم ملف المخرجات، تتم كتابة البيانات في هذا الملف. بخلاف ذلك، يتم استخدام اسم الملف في معلمة الدفعة.

ملاحظة: متغيرات الاستبدال. بعد استدعاء معالجة السجلات، في حالة وجود متغيرات نظام في اسم الملف، يتم حلها في الوقت الحالي.

إدارة أسماء الملفات

ويعني هذا النوع من المتطلبات أن خوارزمية "معالجة السجل" تحتاج إلى إدخال اسم ملف يحتوي على بعض قيم الأعمال لتمييز الملفات الفردية. على سبيل المثال، يجب أن يكون موفر الخدمة أو القسم أو قيمة نوع الشخص جزءًا من اسم الملف. ومع ذلك، يوصى بعدم تحديد اسم الملف بالكامل بواسطة الخوارزمية. بدلاً من ذلك، يمكنك السماح للمستخدم الذي يقوم بتنفيذ مهمة مجموعة المعالجة بتقديم اسم ملف مطلوب كمعلمة مجموعة معالجة. وبهذه الطريقة، يمكن أن يتضمن أي من متغيرات الاستبدال المدعومة لمعلومات النظام (مثل رقم تشغيل مجموعة المعالجة أو طابع التاريخ/الوقت) التي تضمن أن ملفاتك فريدة لتشغيل مجموعة معالجة محدد. يمكن للخوارزمية تعيين متغير الاستبدال الذي تبحث عنه لاستبداله بقيمة العمل.

على سبيل المثال، باستخدام الملفات لكل حالة استخدام قسم، تخيل أن المستخدم يشير إلى اسم الملف EXTRACT_​FILE_​<DIV>_​{BN}_​{RN}_​{TN}.csv. تتلقى خوارزمية معالجة السجل هذه المعلمة. تعرف البحث عن "<DIV>" واستبدالها بالقسم الفعلي. تخيل أن رمز القسم هو A100، حيث يُرجع اسم الملف EXTRACT_ FILE_ A100_ {BN}_ {RN}_ {TN}.csv في مخرجاته، بالإضافة إلى البيانات المطلوب كتابتها في هذا الملف لوحدة العمل هذه.

بالنسبة لحالة استخدام معلومات الشخص أعلاه، حيث تتم كتابة ملفين، يكون الاقتراح هو استخدام معلمة اسم الملف لأحد الملفات، على سبيل المثال ملف معلومات الشخص. يجب استخدام معلمة إضافية لتحديد الملف الثاني، ملف معلومات جهة الاتصال. ومن ثم يقوم المستخدمون الذين يقومون بتنفيذ مهمة مجموعة المعالجة بتحديد المعلمات التالية:

اسم المعلمة الوصف القيمة تعليقات
fileName اسم الملف persons_​<personType>_​{BN}.txt هذه هي معلمة اسم الملف المتوفرة مع الاستخراج.
contactFileName اسم ملف جهة الاتصال contacts_​{BN}.txt هذه معلمة خاصة محددة بواسطة التحكم في مجموعة معالجة استخراج إدارة النقدية.

تقوم خوارزمية "معالجة السجل" بالبحث عن معلمة "اسم الملف" المقدمة كمدخلات، والبحث عن النص "<personType>" واستبداله بقيمة نوع الشخص وإرجاع اسم الملف هذا في المخرجات. عند إنشاء قائمة بالمخططات المطلوب إرجاعها في المخرجات، ستتضمن القائمة التي تتضمن معلومات اتصال الشخص اسم الملف الموجود في معلمة اسم ملف جهة الاتصال المقدمة كمدخلات.

تسلسلات عمليات متعددة

تعمل هذه الوظيفة كما هو متوقع مع سلاسل عمليات متعددة. استنادًا إلى حالة الاستخدام وتنفيذ خوارزمية "تحديد السجلات"، يمكن أن ينتج عن كل تسلسل عمليات ملفات لنفس قيمة الأعمال. دعنا نستخدم حالة استخدام القسم. تخيل أن التنفيذ له ثلاث أقسام: A100، B200، C300. تخيل الآن أن المستخرج مخصص للمعلومات المالية لحساب. يجب أن تكون خوارزمية تحديد السجلات سلسلة عمليات حسب معرف الحساب حتى يتم توزيع البيانات بالتساوي عبر سلاسل العمليات المتعددة. ولكن في كل سلسلة عمليات، يمكن أن تكون الحسابات في أي من أقسام التنفيذ الثلاثة. لذا يمكن أن ينتج كل سلسلة عمليات 3 ملفات لكل قسم من الأقسام الثلاثة.

كما هو موضح في استخراج متعدد سلاسل العمليات، يدعم النظام خيار التركيب، مما يسمح لك بتجميع الملفات بحيث يكون لديك 3 ملفات كاملة للأقسام الثلاثة. تنطبق نفس الميزات والقيود الموضحة في هذا الموضوع على حالة الاستخدام هذه.

إغلاق الملفات

ومن الاعتبارات المهمة عند استخدام هذه الوظيفة أنه يجب الانتباه إلى عدد الملفات المفتوحة أثناء عملية مجموعة المعالجة. حيث يستغرق كل ملف مفتوح بعض الذاكرة لإدارته. وعلى هذا النحو، فرض المنتج حد 10 ملفات مفتوحة فقط (لكل سلسلة عمليات) أثناء تشغيل مهمة مجموعة المعالجة. عند تصميم دفعة للكتابة في ملفات متعددة، يشجعك المنتج بشدة على تصميم العملية بحيث يمكن كتابة جميع البيانات الخاصة بملف واحد كلما أمكن، ويمكن إغلاق هذا الملف قبل الانتقال إلى الملف التالي.

لنلقِ نظرة على الأمثلة لدينا.

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

كيف سيعرف برنامج الدفعة موعد إغلاق ملف؟ نظرًا لأن برنامج مجموعة المعالجة غير محدد ولا يعرف نوع البيانات التي تتم معالجتها أو متى يجب إغلاق الملفات، يجب أن توفر خوارزمية "معالجة السجل" هذه المعلومات.

ملاحظة: ستقوم عملية مجموعة المعالجة بإصدار خطأ إذا كانت سجلات المعالجة تشير إلى أن الملف المطلوب الكتابة إليه هو الملف الذي تم إغلاقه بالفعل. غير مسموح بإعادة فتح الملفات المغلقة. يجب مراجعة تصميم العملية في حالة تلقي هذا الخطأ.

ولإدارة ذلك، توفر عملية مجموعة المعالجة خوارزمية "معالجة السجل" قائمة بالملفات المفتوحة (مع عدم حل متغيرات استبدال النظام) وقيمة منطقية لتحديد ما إذا كان يجب إغلاق الملف أم لا. لمزيد من التوضيح، سنستخدم الأمثلة لدينا.

مثال على الملف لكل قسم

حالة الاستخدام هذه هي أن هناك 4 أقسام في التنفيذ: NORTH، EAST، SOUTH، WEST وأن البيانات (بيانات الحساب) يجب تجميعها في ملفات منفصلة حسب القسم.

يوصى بأن تقوم خوارزمية "تحديد السجلات" بتحديد البيانات المطلوبة حسب القسم.

تقوم عملية مجموعة المعالجة بتمرير قائمة الملفات المفتوحة إلى خوارزمية "معالجة السجل" (يجب أن يكون هناك صفر أو واحد فقط). في هذه الحالة، تكون الإشارة الوحيدة إلى أن بيانات قسم واحد قد انتهت هي ما إذا كانت خوارزمية "معالجة السجل" ترى أن بياناتها خاصة بقسم واحد والملف المفتوح المدرج مخصص لقسم مختلف. يجب أن يقوم كل استدعاء بإعداد اسم الملف الخاص به. ثم من المفترض أن يظهر اسم الملف الخاص به في قائمة الملفات المفتوحة. وإذا لم يتم ذلك، فيجب أن يشير إلى أنه يجب إغلاق الملف المفتوح الآخر. (لاحظ أنه ليس من الضروري إضافة نفسه إلى "القائمة المفتوحة". يبحث برنامج المجموعة فقط عن القيود التي تم تعليمها كمقفلة سيتجاهل الإدخالات التي لم يتم تعليمها كمغلقة).

افترض أن اسم الملف في معلمة مجموعة المعالجة هو myFile_​<DIV>_​{BN}.txt

يتم فرز البيانات بحيث تتم معالجة الحسابات في قسم EAST أولاً. دعونا نتخيل أن هذه وحدة عمل موجودة أيضًا في قسم EAST. يستقبل اسم الملف وقائمة الملفات المفتوحة.

...
<hard>
<batchParms>
  <BatchParm>
    <name>fileName</name>
    <value>myFile_<DIV>_{BN}.txt</value>
  </BatchParm>
  ...
</batchParms>
<openFiles>
  <OpenFile>
    <closeFile></closeFile>
    <fileName>myFile_EAST_{BN}.txt</fileName>
  </OpenFile>
</openFiles>
...
</hard>

تقوم الخوارزمية باستبدال قسمها في الجزء <DIV> من الملف وملء ذلك في المخرجات. ثم تقارن اسم الملف بالقائمة الحالية من الملفات المفتوحة. وتجد ملفه بحيث لا يحتاج إلى فعل أي شيء آخر.


<hard>
...
<fileName>myFile_EAST_{BN}.txt</fileName>
...
<openFiles>
  <OpenFile>
    <closeFile></closeFile>
    <fileName>myFile_EAST_{BN}.txt</fileName>
  </OpenFile>
</openFiles>
...
</hard>

إذا تخيلنا عندئذ استدعاء لخوارزمية سجلات العملية حيث القسم هو NORTH وهو أول إدخال لهذا القسم، فإليك ما تتلقاه:


<hard>
<batchParms>
  <BatchParm>
    <name>fileName</name>
    <value>myFile_<DIV>_{BN}.txt</value>
  </BatchParm>
  ...
</batchParms>
<openFiles>
  <OpenFile>
    <closeFile>true</closeFile>
    <fileName>myFile_EAST_{BN}.txt</fileName>
  </OpenFile>
</openFiles>
...
</hard>

تقوم الخوارزمية باستبدال قسمها في الجزء <DIV> من الملف وملء ذلك في المخرجات. ثم تقارن اسم الملف بالقائمة الحالية من الملفات المفتوحة ولا تبحث عن اسم الملف. مما يعني أنه يجب إغلاق الملف المفتوح الموجود.


<hard>
...
<fileName>myFile_NORTH_{BN}.txt</fileName>
...
<openFiles>
  <OpenFile>
    <closeFile>true</closeFile>
    <fileName>myFile_EAST_{BN}.txt</fileName>
  </OpenFile>
</openFiles>
...
</hard>

مثال على الملف لكل مزود خدمة

وفي حالة الاستخدام هذه، تكون وحدة العمل هي مزود الخدمة ويجب أن يكون لكل مزود خدمة ملف خاص به. في هذه الحالة، نظرًا لأن خوارزمية "معالجة السجل" تقوم بإعداد البيانات واسم الملف الفريد لمزود الخدمة الخاص بها، يمكن أن تشير أيضًا إلى إمكانية إغلاق الملف. لا توجد حاجة لانتظار الاستدعاء التالي لمعالجة السجل للإشارة إلى إمكانية إغلاق الملف السابق. لنفترض أن اسم الملف هو MYFILE_​<serviceProvder>_​{BN}_​{TN}.txt. سيؤدي كل استدعاء لمعالجة السجلات إلى تمرير اسم ملف معلمة الدفعة وعدم فتح ملفات.


<hard>
<batchParms>
  <BatchParm>
    <name>fileName</name>
    <value>MYFILE_<serviceProvider>_{BC}_{TN}.txt</value>
  </BatchParm>
  ...
</batchParms>
<openFiles>
  <OpenFile>
    <fileName></fileName>
    <closeFile></closeFile>
  </OpenFile>
</openFiles>
...
</hard>

تقوم الخوارزمية بمعالجة البيانات لمزود الخدمة A100. يقوم بإرجاع المعلومات التالية المتعلقة باسم الملف، وتحديدًا اسم الملف المفرد في المخرجات المرتبطة بموفر الخدمة هذا وإضافة الملف الخاص به إلى قائمة الملفات المفتوحة ويشير إلى أنه يجب إغلاقه. (لاحظ أن الملف لكل وحدة عمل هو حالة الاستخدام الوحيدة المعروفة حيث ستعرف الخوارزمية أنها آخر إدخال لملف وإغلاق نفسها.)

<hard>
...
<fileName>MYFILE_A100_{BC}_{TN}.txt</fileName>
...
<openFiles>
  <OpenFile>
    <closeFile>true</closeFile>
    <fileName>MYFILE_A100_{BC}_{TN}.txt</fileName>
  </OpenFile>
</openFiles>
...
</hard>

مثال على الملفات المفتوحة المتعددة

يفترض هذا المثال أن أسماء الملفات معرفة وفقًا لقسم "إدارة أسماء الملفات" أعلاه. سنفترض أن مصمم الخوارزمية اختار عدم إغلاق ملف معلومات الشخص بشكل نشط نظرًا لعدم فتح أكثر من ثلاثة ملفات. وبالمثل، نفترض أنهم اختاروا عدم ترتيب البيانات حسب نوع الشخص. إليك ما تم تمريره في منتصف التشغيل:

<hard>
<batchParms>
  <BatchParm>
    <name>fileName</name>
    <value>persons_<personType>_{BN}.txt</value>
  </BatchParm>
  <BatchParm>
    <name>contactFileName</name>
    <value>contacts_{BN}.txt</value>
   </BatchParm>
  ...
</batchParms>
<openFiles>
  <OpenFile>
    <fileName>persons_P_{BN}.txt</fileName>
    <closeFile></closeFile>
  </OpenFile>
   <OpenFile>
    <fileName>persons_B_{BN}.txt</fileName>
    <closeFile></closeFile>
  </OpenFile>
  <OpenFile>
    <fileName>contacts_{BN}.txt</fileName>
    <closeFile></closeFile>
  </OpenFile>
</openFiles>
...
</hard>

مثيل من خوارزمية "استدعاء لمعالجة السجلات" التي تحتوي على تفاصيل لنوع شخص واحد ("P").


<fileName>persons_P_{BN}.txt</fileName> 
<fileOutput>
  <listValue>
    <SchemaInstance>
      <recordXMLNode>person</recordXMLNode>
      <schemaName>CM-PersonDetail</schemaName>
      <schemaType>F1SS</schemaType>
      <fileName></fileName>
      <data>LotsOfData</data>
    </SchemaInstance>
  </listValue>
  <listValue>
    <SchemaInstance>
      <recordXMLNode>person</recordXMLNode>
      <schemaName>CM-AddressDetail</schemaName>
      <schemaType>F1SS</schemaType>
      <fileName></fileName>
      <data>LotsOfData</data>
    </SchemaInstance>
  </listValue>
  <listValue>
    <SchemaInstance>
      <recordXMLNode></recordXMLNode>
      <schemaName>CM-ContactDetail</schemaName>
      <schemaType>F1SS</schemaType>
      <fileName>contacts_{BN}.txt</fileName>
      <data>LotsOfData</data>
    </SchemaInstance>
  </listValue>
</fileOutput>

يوضح مثال XML هذا النقاط التالية:

  • يوجد اسم ملف تجاوز في العنصر fileName.
  • لا يشتمل أول مخططين على أية قيمة في fileOutput\listValue\SchemaInstance\fileName ومن ثم يجب كتابتهما في الملف في fileName. لاحظ أن هذين المخططين يتضمنان أيضًا نقطة توصيل XML للسجل. سيضمن ذلك أنه إذا كانت المخرجات بتنسيق XML، فسيتم تضمين البيانات من كلا المخططين بواسطة نقطة توصيل XML "الشخص". هذه ليست وظيفة مرتبطة بهذه العملية. فهي تحاول فقط توضيح العديد من الميزات.
  • يشتمل المخطط الثالث على قيد في fileOutput\listValue\SchemaInstance\fileName . ومن ثم تتم كتابة هذه البيانات في ملف منفصل.