استخدم SIL إلى أقصى حد

تحية للجميع!

في هذه المقالة ، أود أن أتحدث عن SIL مرة أخرى . نعلم جميعًا أن SIL لديها عدد كبير من الوظائف التي تسهل إلى حد كبير أتمتة أعمالنا في Atlassian Jira و Confluence.

نكتب نصوص SIL في عنصر قائمة SIL Manager ومعظمنا لا ينتبه لبقية عناصر القائمة. أنا أتحدث عن عناصر القائمة هذه:



في هذه المقالة سوف أتناول كل عنصر من عناصر القائمة وأخبرك بما يمكنك الحصول عليه من كل عنصر.

أود أيضًا أن أشير إلى أننا نتحدث الآن عن محرك SIL ، مما يعني أن جميع هذه الميزات متاحة لك مجانًا.

استخدام حقل مخصص


توفر هذه القائمة معلومات حول كيفية استخدام كل حقل مخصص في مثيل Jira الخاص بك. يمكن العثور على معلومات من البائع هنا .
يمكنك رؤية جميع الحقول في Jira الخاص بك إذا ذهبت إلى الترس -> قضايا -> الحقول المخصصة.



هذا ما ستبدو عليه الشاشة إذا انتقلت إلى قائمة استخدام الحقل المخصص:



كما ترى ، يمكنك تحديد أي حقل مخصص والحصول على معلومات عنه. لتصفية الحقول المتاحة ، ما عليك سوى البدء في كتابة الأحرف وستتم تصفية قائمة الحقول المخصصة بهذه الأحرف.



بعد أن ترى مجالك ، انقر عليه:



يمكنك رؤية المعلومات التالية في هذا المجال:

  • الأسماء المستعارة سيل
  • الشاشات والمشاريع التي يتم استخدام الحقل فيها.
  • أرقام الأسطر النصية التي يتم استخدام هذا الحقل فيها.

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

تكوين صفحة إعادة التوجيه


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

افترض أن كل موظف في Jira الخاص بنا يقوم كل شهر بإدخال فاتورة لاستلام الأموال على شكل تذكرة في مشروع INV.



كما ترى ، فتح أليكسي ماتفييف حسابين لشهري مارس وأبريل.

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

كيف سيبدو هذا الرابط؟

بالطبع ، يمكننا أن نجعل الرابط مثل هذاhttp: // localhost: 2990 / jira / browse / INV-2 . لكن INV-2 ستكون النتيجة الأخيرة لشهر أبريل. في شهر مايو سيكون هناك تذكرة بحساب مختلف. يمكننا تغيير الرابط كل شهر على صفحة موظف في قسم شؤون الموظفين ، ولكن هذا معقد للغاية. هناك حاجة إلى شيء أبسط.

ويأتي مساعدتنا في إعادة توجيه الصفحة فقط.

دعونا تكوين.

في نظام قسم الموارد البشرية لدينا ، سيبدو الرابط كما يلي:

http://localhost:2990/jira/plugins/servlet/kredi?userName=Alexey+Matveev

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

string userName = argv["userName"];

if (isNull(userName)) {
    return "/plugins/servlet/kredierror?customErrorTitle=User Not Provided&customErrorMessage=Provide user with userName parameter";
}
if (isNull(getUserByFullName(userName))) {
    return "/plugins/servlet/kredierror?customErrorTitle=User Not Found&customErrorMessage=User " + userName + " not found";
}
string [] k = selectIssues("project = INV and reporter = " + getUserByFullName(userName).username + " order by \"Invoice Date\" desc");
if (size(k) == 0) {
   return "/plugins/servlet/kredierror?customErrorTitle=Invoice Not Found&customErrorMessage=No invoices for "+ userName; 
}
return "/browse/" + k[0];

يقوم الكود بما يلي:

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

تحقق الآن!

أولاً سننشئ مثل هذا الرابط وننقر عليه:

http://localhost:2990/jira/plugins/servlet/kredi?userName=Alexey+Matveev
سنرى مثل هذه الشاشة:

هذا صحيح! هذا آخر إحصاء لي.
الآن لن نقوم بتمرير المستخدم كمعلمة:

http://localhost:2990/jira/plugins/servlet/kredi

ولدينا صفحة خطأ:

هذا صحيح!
الآن دعنا نمر مستخدم ليس في Jira:

http://localhost:2990/jira/plugins/servlet/kredi?userName=Super+Man

رأينا صفحة بها خطأ:



مرة أخرى ، كل شيء صحيح!

والآن سننقل المستخدم الذي لم ينشئ تذكرة واحدة بحساب:

http://localhost:2990/jira/plugins/servlet/kredi?userName=Tomas+Brook

وحصلنا على صفحة بها خطأ:



كل شيء يعمل بشكل صحيح!

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

تغير المستخدم


يسمح عنصر القائمة هذا للمسؤول بالعمل تحت أي مستخدم مسجل في Jira دون معرفة كلمة مرور هذا المستخدم. يمكنك قراءة المعلومات من البائع هنا .

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



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



حدد المستخدم المطلوب وانقر على زر التبديل! .. سيتم تسجيل دخولك تحت هذا المستخدم.

لتسجيل الدخول مرة أخرى ضمن المستخدم الخاص بك ، حدد خيار التبديل

إلى:



تكوين Sil


تتيح لك هذه القائمة تكوين SIL. يمكن العثور على معلومات من البائع هنا . يتيح لك



SIL Home Directory تحديد الدليل الذي سيتم تخزين جميع البرامج النصية فيه. القيمة المفترضة هي JIRA_HOME / silprograms. يتيح لك

Charset تحديد ترميز البرامج النصية التي سيتم تخزينها. من الأفضل ترك الترميز بتنسيق UTF-8. لدي فكرة سيئة عن سبب الحاجة إلى هذا الإعداد. يسمح لك حجم ذاكرة التخزين المؤقت لـ

S IL بتحديد عدد النصوص البرمجية التي تم تحويل رمزها إلى كود بايت Java وتخزينها في ذاكرة التخزين المؤقت SIL.

لماذا نحتاج إلى ذاكرة تخزين مؤقت SIL؟

إليك عينة من رمز SIL:

string message = "My message";
runnerLog(message);

لتنفيذ هذا الكود ، نحتاج إلى ترجمته إلى كود Java byte. يحتوي SIL على عدد كبير من البنيات: الهياكل والوظائف والحلقات والظروف والمهام وما إلى ذلك ، لترجمة كل هذا إلى كود بايت Java ، تحتاج إلى وقت ، وذاكرة التخزين المؤقت SIL تسمح لك فقط بتوفير هذا الوقت. يتم تحويل الرمز إلى رمز بايت Java مرة واحدة وتخزينه في ذاكرة التخزين المؤقت. إذا كان هذا الرمز بحاجة إلى التنفيذ مرة أخرى ، فسيتم أخذ رمز بايت Java الجاهز من ذاكرة التخزين المؤقت SIL.

لذلك ، إذا كان لديك الآلاف من البرامج النصية SIL ، فمن المنطقي زيادة حجم ذاكرة التخزين المؤقت.

مصادر البيانات


يتيح لك عنصر القائمة هذا تكوين مصادر البيانات لقواعد البيانات واستخدام هذه المصادر في التعليمات البرمجية الخاصة بك.

يعد هذا ملائمًا لأنه لا يتعين عليك استخدام معلمات الوصول إلى قاعدة البيانات وكلمة مرور المستخدم في التعليمات البرمجية. يمكنك العثور على معلومات البائع هنا .



دعونا تكوين مصدر قاعدة البيانات.

انقر فوق الزر "إضافة مصدر بيانات" وأدخل إعدادات قاعدة البيانات:



لدي Jira أخرى مثبتة على جهاز الكمبيوتر الخاص بي وأريد الحصول على البيانات من قاعدة بيانات Jira.
من المهم ملاحظة أن SIL لا تحتوي على برامج تشغيل jdbc في توزيعها. لذلك ، يجب عليك التأكد من توفر برامج التشغيل هذه في Jira بنفسك. هنا هنا يمكنك قراءة كيفية القيام بذلك.

انقر الآن على الزر حفظ وسيتم إنشاء مصدر قاعدة البيانات المسمى external_database:



الآن دعنا نستخدم مصدر قاعدة البيانات هذا في برنامجنا النصي:

string [] results = sql("external_database", "select * from cwd_group");
runnerLog(results);

أقوم بتنفيذ استعلام في هذا البرنامج النصي sql وأحصل على النتيجة:



تكوين مرسل البريد


جعلني عنصر القائمة هذا يعاني في الوقت المناسب. يمكن العثور على معلومات من البائع هنا .

يمكنك إرسال رسائل البريد الإلكتروني باستخدام sendEmail وفي عنصر القائمة هذا ، تحدد معلمات هذه الوظيفة. يسمح لك



دليل القوالب الخاص بي بتحديد المسار لقوالب البريد الإلكتروني . تتيح لك

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

إرسال بريد عبريسمح لك بتحديد كيفية إرسال البريد الإلكتروني. فيما يلي الخيارات المتاحة:

  • مرسل الحاوية - سيتم إرسال الرسالة من خلال قائمة انتظار البريد الإلكتروني جيرا القياسية.



بالإضافة إلى ذلك ، يمكنك رؤية رسائل الخطأ ورسائل التصحيح عند إرسال بريد إلكتروني في ملف atlassian-jira-outgoing-mail.log. للقيام بذلك ، لا تزال بحاجة إلى تكوين تسجيل إرسال رسائل البريد الإلكتروني إلى Jira. يمكنك قراءة المزيد حول تكوين تسجيل الدخول في Jira هنا . أفضل استخدام هذا الخيار بالذات.
  • مرسل مباشر ، مخصص - يمكنك تحديد خادم البريد الخاص بك لإرسال الرسائل:





في هذه الحالة ، لن ترى رسائل خطأ أو رسائل تصحيح أخطاء في ملف atlassian-jira-outgoing-mail.log ، ولكنك سترى رسائل في ملف atlassian-jira.log.
  • Direct sender, default — , , Jira. atlassian-jira-outgoing-mail.log, atlassian-jira.log.
  • Null sender (log only) — atlassian-jira.log. . . com.keplerinfo ERROR, , . , , . , INFO com.keplerinfo. . :



2020-05-24 14:19:53,601+0300 pool-42-thread-8 INFO admin 859x6032x1 aizaws 0:0:0:0:0:0:0:1 /rest/keplerrominfo/refapp/latest/async-script/runScriptFromEditor [c.k.r.sil.impl.MailConfigurationAccessor] NULL MAILER (log only mail sender) : Subject: aa, From: null, To: [alex@gmail.com], CC: [alex@bk.ru], Body:
aa

Asynchronous Runner


يمكنك قراءة المعلومات من البائع هنا :

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

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

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

يمكنك أيضًا في هذه الشاشة رؤية جميع البرامج النصية قيد التشغيل حاليًا.

الأنظمة البعيدة


تتيح لك قائمة Remote Systems ما يلي:
  • إضافة اتصالات إلى مثيلات Jira الخارجية وتشغيل SIL النصية على تلك المثيلات.
  • تعيين أذونات لتنفيذ البرامج النصية SIL من خلال SIL REST API للمستخدمين الذين ليسوا مسؤولي Jira.

يمكنك قراءة المعلومات من البائع هنا .

لنقم أولاً بإنشاء اتصال عن بعد بـ Jira وتنفيذ نص SIL عليه.
لقد رفعت حالتين من جيرا: localhost: 2990 / jira و localhost: 8080.
لقد أنشأت هذا البرنامج النصي على localhost: 8080 واستدعيت هذا البرنامج النصي test.sil:

logPrint("ERROR", "I am called from " + argv[0]);

يأخذ هذا البرنامج النصي معلمة ويعرض رسالة بها هذه المعلمة في سجل atlassian-jira.log.
الآن على localhost: 2990 / jira سأقوم بإنشاء اتصال عن بعد. سأذهب إلى الترس -> إدارة التطبيقات -> أنظمة التحكم عن بعد ، انقر فوق زر إضافة جهاز تحكم عن بعد وأدخل بيانات Jira لـ localhost: 8080:



الآن أنقر على زر حفظ وعلى نفس مثيل Jira (localhost: 2990 / jira) سأقوم بإنشاء نص برمجي للاتصال النصي مع المضيف المحلي: 8080:

call("my_ext_jira", "test.sil", "localhost:2990/jira")

المعلمة الأولى هي الاتصال عن بعد الذي أنشأته: my_ext_jira.
المعلمة الثانية هي اسم البرنامج النصي الذي سيتم تنفيذه على النظام البعيد (localhost: 8080): test.sil.

المعلمة الثالثة هي السلسلة التي سيتم تمريرها إلى test.sil: localhost: 2990 / jira.

الآن قم بتنفيذ هذا البرنامج النصي (البرنامج الموجود على localhost: 2990 / jira) وشاهد السجلات على النظام البعيد (localhost: 8080). سنرى هذا الخط:

2020-05-25 08:30:57,944+0000 pool-38-thread-2 ERROR admin 510x101x1 3sauem 172.26.0.1 /rest/keplerrominfo/refapp/latest/async-script/runScript [c.k.s.lang.routines.LogPrintRoutine] I am called from localhost:2990/jira

هذا يعني أننا نجحنا في استدعاء البرنامج النصي SIL على localhost: 8080 نظام بعيد مع localhost: 2990 / jira.

الآن دعونا نلقي نظرة على قسم الأمان على الشاشة التي نراها بعد تحديد عنصر قائمة الأنظمة البعيدة.

افترض أن لدينا نصان على مضيف محلي: 2990 / jira.
test.sil

call("my_ext_jira", "test.sil", "localhost:2990/jira")

test1.sil

runerLog("Hello World");

ولدينا المستخدم user1 ، الذي ليس لديه حقوق المسؤول.

نريد استدعاء البرامج النصية والبرامج النصية المضمنة الموجودة في نظام الملفات من قبل هذا المستخدم.

فيما يلي شاشة قائمة أنظمة التحكم عن بعد:



سنعمل مع أزرار تنفيذ المنح وأزرار القراءة الكبرى ومنح التنفيذ من قسم الأمان.

أولاً ، حاول استدعاء البرنامج النصي المضمن على أنه user1. سنقوم باستدعاء البرنامج النصي المضمن باستخدام طريقة SIL REST API.

http://localhost:2990/jira/rest/keplerrominfo/refapp/1.0/async-script/runScript

هنا مع JSON:

{
   "source" : {
    "type": "INLINE",
    "code": "return 1;"
    }
}

ونحصل على مثل هذا الخطأ 403 Forbidden Error.

الآن اضغط على زر تنفيذ المنحة المضمنة وقم بتقديم منحة إلى user1:



وسوف نحصل على 200 رمز استجابة ، مما يعني أننا أكملنا البرنامج النصي المضمن بنجاح.

الآن دعونا تشغيل البرنامج النصي test1.sil تحت user1. هذه المرة ، سيكون JSON على النحو التالي:

{
   "source": {
        "type": "FILE",
        "code": "test1.sil"
    }
}

ومرة أخرى ، حصلنا على هذا الخطأ 403 Forbidden Error.

الآن نعطي حقوق user1 لتنفيذ البرنامج النصي test1.sil. انقر على زر تنفيذ المنحة:



هذه المرة ، رمز الاستجابة هو 200. كل شيء يعمل .

تكوين LDAP


يمكنك تكوين الاتصال بـ LDAP. يمكن العثور على معلومات البائع هنا .

أبدأ خادم ldap في عامل الميناء من هنا .

docker run -p 389:389 -p 636:636 --name my-openldap-container --env LDAP_ADMIN_PASSWORD="adminadmin" --detach osixia/openldap:1.3.0

خادم ldap قيد التشغيل.

الآن دعنا ننقر على زر إضافة LDAP وتكوين الاتصال:



يتوفر فقط Active Directory لحقل الدليل. ولكن هذا لا يعني أنه يمكنك الاتصال بـ Microsoft Active Directory فقط. يمكنك الاتصال بأي خادم ldap. لقد اتصلت لفتح ldap.

الآن ، دعنا نختار مستخدمين من LDAP باستخدام ldapUserList :

runnerLog(ldapUserList({"cn", "uid"}, "objectClass=*", "myldap"));

وحصلنا على النتيجة:



هذا يعني أن كل شيء نجح بالنسبة لنا.

تخزين البرنامج النصي


يتيح لك عنصر القائمة هذا تحديد مكان تخزين البرامج النصية لـ SIL. يمكنك قراءة المعلومات من البائع هنا .

بشكل افتراضي ، يتم تخزين البرامج النصية في نظام الملفات (قرص الخيار):



يمكنك اختيار تخزين البرامج النصية في قاعدة البيانات (قاعدة بيانات الخيار). في هذه الحالة ، سيتم تخزين البرامج النصية في الجدول AO_1B54DA_TSTEXT.

في رأيي ، لا يزال من الأفضل تخزين البرامج النصية في نظام الملفات. في هذه الحالة ، يمكنك استخدام نظام التحكم في الإصدار ، على سبيل المثال ، Bitbucket.

تعيين الحقول المخصصة


في عنصر القائمة هذا ، يمكنك تحديد تعيين أنواع الحقول المخصصة لأنواع قيم SIL. يمكنك قراءة المعلومات من البائع هنا .



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

string[] value =  #{My Checkbox Field};

ولتعيين قيمة ، إليك رمز مثل هذا:

string[] value =  {"value1", "value2"};
#{My Checkbox Field} =  value;

لا يمكنك تغيير التعيين لهذا الحقل لأنه حقل قياسي. وأشار Cprime بالفعل إلى التعيين الصحيح.

الآن دعونا نلقي نظرة على نوع الحقل المخصص للشبكة. حصلنا على هذا النوع من البرنامج المساعد Table Grid Next Generation. لا يوفر Cprime تعيينًا لهذا الحقل خارج المربع ، لذلك يتم تعيينه افتراضيًا. التعيين الافتراضي هو سلسلة. ولكن يمكنك تغيير التعيين الافتراضي إلى آخر:



في بعض الحالات ، لا يكون التعيين المدمج كافيًا وفي هذه الحالة يمكنك كتابة امتداد لـ SIL باستخدام التعيين الخاص بك. يمكن العثور على مزيد من التفاصيل حول كيفية القيام بذلك هنا .

تكوين التكامل


يمكنك إنشاء اتصالات بـ Slack and Stride في عنصر القائمة هذا. لدى البائع تعليمات مفصلة للغاية حول كيفية القيام بذلك هنا .

تكوين SIL Webhooks


يمكنك إنشاء واجهة برمجة تطبيقات REST الخاصة بك والتي ستستدعي نصوص SIL. يمكنك أن تقرأ هنا .

التشخيص SIL


يوفر عنصر القائمة هذا معلومات تكوين SIL شاملة:



معظم هذه المعلومات ضرورية لمطوري SIL ، ولكن أود أن ألفت الانتباه إلى ميزة واحدة مهمة على هذه الشاشة.

يمكنك قتل البرامج النصية SIL التي تعمل حاليًا.

لنفترض أنك كتبت وأدارت نصًا برمجيًا أنشأ حلقة مستمرة. بدون هذا الخيار ، سيتعين عليك الانتظار حتى يعمل البرنامج النصي لفترة أطول من الوقت في معلمة Time To Live (TTL) ولم يتم قتله. ولكن مع هذا الخيار لا يمكنك الانتظار حتى هذه اللحظة.

فقط انقر على زر "قتل":


All Articles