vdcasino
betexper
imajbet
perabet
casinomaxi
ilbet

چنانچه در هریک از مراحل نصب یا کاربری نرم‌افزارها به مشکلی برخورد کرده‌اید یا هر سوال، اشکال یا ابهامی در این زمینه دارید، می‌توانید پاسخ خود را ابتدا در مطالب موجود جستجو و در صورت لزوم به عنوان یک مبحث جدید مطرح کنید، تا کارشناسان پشتیبانی به آن پاسخ دهند.

به منظور ثبت سوال جدید و یا پاسخ به موضوعات موجود، ابتدا می بایست از طریق صفحه مربوطه به سامانه وارد شوید. چنانچه نام کاربری دریافت نکرده اید، به صورت رایگان و از طریق صفحه مربوطه، ابتدا در سامانه ثبت نام نمایید.

انجمن های پشتیبانی سیمرغ نوسا

قبليقبلي Go to previous topic
بعديبعدي Go to next topic
آخرين ارسال 26 آذر 1403 10:12 ق.ظ توسط  Tariverdi
توسعه امکانات تکمه انتخاب در فیلدهای انتخابگر: 2- محدود کردن فهرست با فیلدهای فرم (FormFieldsJson)
 0 پاسخ
مرتب:
شما مجاز به پاسخ به اين پست نمي باشيد.
مولف پيغام ها


کاربر باتجربه


کاربر باتجربه


--
26 آذر 1403 10:12 ق.ظ

    برای درک بهتر این مطلب لازم است قبلا با مفهوم توسعه امکانات تکمه انتخاب در فیلدهای انتخابگر (کاربر، منبع دیجیتال و انتخابگر حرفی) آشنا شده باشید. این مفهوم قبلا در مطلب زیر شرح داده شده است:

    توسعه امکانات تکمه انتخاب در فیلدهای انتخابگر: 1- مدل استفاده از گروه پارامترها

    در مطلب فوق علاوه بر مفاهیم، روش محدود کردن فهرست داده ها بر اساس گروه پارامترها نیز شرح داده شده است. و اما در مطلب جاری به یک روش دیگر یعنی روش محدود کردن فهرست داده ها براساس محتوای فیلدهای فرم انجام وظیفه می پردازیم.

    مدل محدود کردن فهرست براساس فیلدهای فرم انجام وظیفه

    در این مدل، برخلاف مدل قبلی، گروه پارامتر و فرم ورود اطلاعات فیلدهای گروه پارامتر وجود ندارد و محدود کردن فهرست داده ها، تنها از طریق تابع جستجوی پارامتریک انجام می شود. برای این کار کافی است در محاوره تدوین یک فیلد گردش کار و در زبانه «رفتار در فرم» در بخش تنظیمات تکمه انتخاب، همانطور که در شکل زیر نشان داده شده است، تنها «تابع جستجو در سرور» را تعیین کنید.

     

    حال با توجه به عدم تعیین گروه پارامتر ، باید ببینیم در این مدل، پارامتر جستجو به چه صورت به تابع جستجو پاس می شود.

    پارامتر جستجو در این مدل

    در مدل قبلی مبتنی بر گروه پارامترها، در واقع پارامتری که پاس می شد، گروه پارامتر بود اما در مدل مبتنی بر فیلدهای فرم انجام وظیفه، این پارامتر یک رشته حرفی به فرمت JSON است که شامل فیلدهای فرم و مقادیر آنهاست. این رشته حرفی بسته به موقعیت فیلد انتخابگر در فرم، به دو صورت FormFieldsJson و ParentFormFieldsJson قابل دسترسی است:

    1. فیلدها انتخابگر ساده: در این حالت، رشته حرفی  FormFieldsJson شامل تمام فیلدهای فرم انجام وظیفه و مقادیر آنهاست.

    برای مثال به فرم زیر توجه کنید:

     

    در این حالت نسبت به فیلدهای انتخابگر تعمیرکننده و دستگاه، رشته حرفی FormFieldsJson به شکل زیر است:

    FormFieldsJson= {“device”:”01/1/01050000”, “expert”:16, “dateIn”:1724877000000, “fixCost”:1600000}

     

    1. فیلدهای انتخابگر موجود در آرایه: در این حالت، مقادیر فیلدهای موجود در سطر جاری در رشته حرفی FormFieldsJson و کل فیلدهای فرم اعم از آرایه (شامل تمام تکرارها) و غیر آرایه در رشته حرفی ParentFormFieldsJson قابل دسترسی است.

    برای مثال در فرم زیر، فیلد «کارشناس ناظر» یکی از اجزای آرایه «اطلاعات بازدید» است.

     

    در این حالت، FormFieldsJson تنها شامل مقادیر اجزای آرایه در سطر جاری یعنی سطری که تکمه انتخاب محتوا کلیک شده است می باشد:

    FormFieldsJson= {“supervisor”:16, “unitName”:”آموزش”, “visDay”:1724272200000, “notes”:”کمپرسور نیاز به تعمیر دارد”}

    و اما در اینجا، ParentFormFieldsJson شامل تمام فیلدهای فرم اعم از آرایه و غیر آرایه به شکل زیر است:

    ParentFormFieldsJson= {“device”:”01/1/01050000”, “expert”:16, “dateIn”:1724877000000, “fixCost”:1600000, [{“supervisor”:16, “unitName”:”آموزش”, “visDay”:1724272200000, “notes”:”کمپرسور نیاز به تعمیر دارد”}, {“supervisor”:14, “unitName”:”آموزش”, “visDay”:1724531400000, “notes”:”سالم اند”}]}

    بخشی که با رنگ آبی مشخص شده است مربوط به آرایه «اطلاعات بازدید» است. ملاحظه می کنید که هر دو تکرار این آرایه در ParentFormFieldsJson وجود دارد.

    نکته مهم: توجه کنید که برای استفاده از مقادیر فیلدهای موجود در رشته های حرفی به فرم JSON ، ابتدا باید با استفاده از متد JSON.parse این رشته حرفی را به یک Object تبدیل کنید. به این ترتیب مقادیر فیلدها ویژگی (property) های این Object خواهند بود.

    حال برای درک بهتر این مطلب با ذکر یک مثال در انواع فیلدهای انتخابگر (کاربر، منبع دیجیتال و انتخابگر حرفی)، توابع جستجوی پارامتریک متناظر با این فیلدها را تحلیل می کنیم.

     

    فیلد نوع کاربر

    مثال: محدود شدن فهرست کاربران به جایگاه سازمانی

    فرض کنید در گردش کار ارجاع و پیگیری کارها، قاعده کار به این شکل است که هر شخص  ارجاع دهنده (Referee) فقط می تواند کار را به همکاران جایگاه سازمانی  ارجاع دهد. در این حالت بدیهی است که ارجاع دهنده باید در یک فیلد از نوع کاربر ، فهرست کاربران جایگاه سازمانی خود را مشاهده و فرد مورد نظر خود را انتخاب نماید. تابع جستجو برای این مثال به شکل زیر است:

    function WorkFieldEditBtnReferred(p)  {

         var formFields=JSON.parse(p.FormFieldsJson);

         var refInf=WorkUtils.GetUserInf(formFields.Referee);

         var refOrgPosKey=refInf.OrgPosition.Key;

         var userList=WorkUserUtils.GetOrgPositionUserList(refOrgPosKey);

      return JSON.stringify(userList);

    }

    تحلیل تابع

    حال این تابع را سطر به سطر بررسی می کنیم:

    var formFields=JSON.parse(p.FormFieldsJson);

    در ابتدا، رشته حرفی مقادیر فیلدها (p.FormFieldsJson) توسط متد JSON.parse به یک Object تبدیل و در متغیر formFields ذخیره می شود.

     

     var refInf=WorkUtils.GetUserInf(formFields.Referee);

    در این سطر اطلاعات فیلد ارجاع دهنده (formFields.Referee) توسط متد GetUserInf در متغیر refInf قرار می گیرد.

     

    var refOrgPosKey=refInf.OrgPosition.Key;

    var userList=WorkUserUtils.GetOrgPositionUserList(refOrgPosKey);

    در این قسمت ابتدا ویژگی کلید جایگاه سازمانی ارجاع دهنده (OrgPositionKey)در متغیر refOrgPosKey قرار می گیرد و سپس کلید کاربران این جایگاه سازمانی توسط GetOrgPositionUserList استخراج و در آرایه userList قرار می گیرد.

     

      return JSON.stringify(userList);

    و در نهایت، این آرایه، از طریق متد JSON.stringify ، به فرمت JSON تبدیل شده و بازگشت داده می شود.

     

    فیلد نوع منبع دیجیتال

    مثال: محدود شدن فهرست خودروها بر اساس وضعیت طرح ترافیک مقصد

    فرض کنید در یک پایگاه فرایندها، خودروهای سازمان به شکل زیر در درخت منابع دیجیتال ذخیره شده است:

    این منابع دیجیتال در یک گردش کار بنام «مدیریت حمل و نقل» استفاده می شود. به این صورت که در این گردش کار، در فرم زیر آدرس مقصد و وضعیت طرح ترافیک مقصد تعیین می شود:

    فرم انجام وظیفه

     

    همانطور که ملاحظه می کنید، در این فرم، خودروی مورد نظر را باید از یک فیلد نوع منبع دیجیتال انتخاب نماییم. حال می خواهیم بسته به وضعیت طرح ترافیک در آدرس مقصد، فهرست خودروهای منطبق با این وضعیت را مشاهده کنیم. یعنی به عبارت دیگر می خواهیم فهرست منابع دیجیتال (خودروها) را براساس وضعیت طرح ترافیک مقصد محدود کنیم. برای این کار ابتدا نگاهی به محاوره گروه فیلدهای منبع دیجیتال (خودرو) می اندازیم:

    گروه فیلدهای منبع دیجیتال «خودروها»

     

    ملاحظه می کنید که در گروه فیلدهای منبع دیجیتال خودرو، برای هر خودرو سال ساخت و مجوز طرح ترافیک خودرو قابل تعیین است. توضیح این که اگر خودرو مجوز طرح ترافیک داشته باشد، فیلد «مجوز طرح ترافیک» تیک می خورد و در غیر این صورت خودرو تنها به تعداد روز معینی (مثلا 3 روز) می تواند وارد محدوده آلودگی هوا شود. لذا برای این نوع از خودروها تعداد روزهای ورود به طرح آلودگی هوا  ثبت می شود.

    حال با توجه به مطالب بالا، باید شرایط زیر را برای محدود کردن فهرست خودروها پیاده سازی کنیم:

    شرط اول: اگر آدرس مقصد خارج از طرح ترافیک و آلودگی هوا باشد، آنگاه فهرست خودروهای بدون مجوز طرح ترافیک لیست شود.

    شرط دوم: اگر آدرس مقصد در محدوده طرح آلودگی هوا باشد ، آنگاه فهرست خودروهای بدون مجوز طرح ترافیک که کمتر از حد مجاز (3 روز و کمتر) وارد طرح شده اند، لیست شود.

    شرط سوم:  اگر آدرس مقصد در محدوده طرح ترافیک باشد، آنگاه فهرست خودروهای دارای مجوز طرح ترافیک لیست شود.

    به این ترتیب، تابع جستجوی پارامتریک به شکل زیر خواهد بود:

    function WorkFieldEditBtncar3(p) {

        var formFields=JSON.parse(p.FormFieldsJson);

        var carTrafLicence=0;

        if (formFields.destTrafState==3){carTrafLicence=1;}

        var ds=WorkUtils.GetDOState("", "45", 31);       

        data='<_RQST>';

        data+='';

        data+='';

        if (formFields.destTrafState==2){

           data+='';

        }

        data+= '';

        data+='<!--_RQST-->';  

        var fChilds=ds.SearchDOChildren(data);

        return JSON.stringify(fChilds);  

    }

    تحلیل تابع

    در اینجا طبق روال معمول، تابع را سطر به سطر تحلیل می کنیم:

    var formFields=JSON.parse(p.FormFieldsJson);

    در ابتدا رشته حرفی حاوی مقادیر فیلدهای فرم انجام وظیفه (p.FormFieldsJson) را توسط متد JSON.parse تبدیل به یک Object کرده و در متغیر formFields ذخیره می کنیم.

    var carTrafLicence=0;

    برای اعمال شرط روی فیلد مجوز طرح ترافیک خودرو (در گروه فیلد منبع دیجیتال)، متغیری بنام carTrafLicence تعریف می کنیم و مقدار پیش فرض آن را برابر 0 قرار می دهیم. این مقدار هم ارز false در فیلد trafficLicence است.

    if (formFields.destTrafState==3){carTrafLicence=1;}

    در اینجا شرط می کنیم که اگر آدرس مقصد در محدوده طرح ترافیک باشد آنگاه باید خودرو دارای مجوز طرح ترافیک باشد. توضیح این که فیلد وضعیت طرح ترافیک مقصد یک فیلد گزینه ای و دارای سه گزینه به شکل زیر است:

    var ds=WorkUtils.GetDOState("", "45", 31);       

    در این مرحله، به منظور دسترسی به مقادیر گروه فیلدهای منبع دیجیتال خودروها، یک DoState از شاخه «خودروها» از درخت منابع دیجیتال تعریف و در متغیر ds ذخیره می کنیم.

    data='<_RQST>';

    data+='';

    data+='';

    از آنجایی که می خواهیم فرزندان منبع دیجیتال خودروها را جستجو کنیم لذا طبق تعریف نیاز به تولید یک متغیر به فرمت XML داریم. در این متغیر که data نام دارد، در سطر سوم مشخص می کنیم که فیلد مجوز طرح ترافیک خودرو (trafficLicense) باید برابر با متغیر carTrafLicence باشد که در قسمتهای قبل و براساس فیلد وضعیت فیلد طرح ترافیک مقصد (destTrafState) در فرم، محاسبه شده است.

    if (formFields.destTrafState==2){

           data+='';

    }

    data+= '';

    data+='<!--_RQST-->';  

    در این مرحله تعیین می کنیم که اگر آدرس مقصد در محدوده آلودگی هوا باشد آنگاه باید خودروهایی فهرست شوند که تعداد روزهای ورود به محدوده آلودگی هوا (daysInPol)ی آنها از 4 روز کمتر باشد.

    var fChilds=ds.SearchDOChildren(data);

    return JSON.stringify(fChilds);  

    و در انتها جستجوی در فرزندان شاخه خودروها انجام شده و کلید منابع دیجیتال بازیابی شده در یک آرایه بنام fChilds ذخیره می گردد و سپس این آرایه به شکل یک رشته حرفی و با فرمت JSON بازگشت داده می شود.

     

    فیلد انتخابگر حرفی

    مثال: محدود کردن فهرست کالاها به کالاهای عکس دار

    فرض کنید در یک گردش کار درخواست کالاها، فهرست کالاها در یک فیلد انتخابگر حرفی نمایش داده می شود. حال فرض کنید می خواهیم تنها کالاهای عکس دار نمایش داده شود. برای این کار تابع جستجو به شکل زیر است:

    function WorkFieldEditBtnImagedProducts(p) {

        var formFields=JSON.parse(p.FormFieldsJson);

        WorkADOSelect.DBName =  "_AccXP_hamayesh992";

        WorkADOSelect.SelectClause="mat_Code";

        WorkADOSelect.FromClause=" _Mats" ;

        if (kalaImage==1) {

            WorkADOSelect.WhereClause=" mat_Image is not null";

            } else {

             WorkADOSelect.WhereClause=" mat_Image is null";

        }

        var data=WorkADOSelect.Execute();

        var codes=[];

        for (var i=0; i

              codes.push(data.mat_Code)

         }

         return JSON.stringify(codes);

    }

    تحلیل تابع

    در این مثال هم تابع جستجوی پارامتریک را سطر به سطر بررسی می کنیم:

    var formFields=JSON.parse(p.FormFieldsJson);

    در ابتدای تابع، همانند مثالهای قبل، رشته حرفی حاوی مقادیر فیلدهای فرم انجام وظیفه (FormFieldsJson) توسط متد JSON.parse تبدیل به یک Object شده و در متغیر formFields ذخیره می گردد.

    WorkADOSelect.DBName =  "_AccXP_hamayesh992";

    WorkADOSelect.SelectClause="mat_Code";

    WorkADOSelect.FromClause=" _Mats" ;

    در این قسمت شروع به نوشتن یک Query می کنیم برای جستجو و نمایش کالاهای پایگاه مبدا (در اینجا سیستم مالی نوسا) . ملاحظه می کنید که در این مثال، کد کالا (mat_Code) را در جدول کالاها (_Mats) جستجو می کنیم. یادآوری می شود که چون کد انتخابگر حرفی، کد کالاست لذا باید محدودیت را روی کد کالا اعمال کنیم یعنی باید کد کالاهایی را بازیابی کنیم که دارای عکس هستند.

        if (formFields.imageStatus==1) {

            WorkADOSelect.WhereClause=" mat_Image is not null";

            } else {

             WorkADOSelect.WhereClause=" mat_Image is null";

        }

    در این قسمت و در ویژگی WhereClause شرط می کنیم که اگر مقدار فیلد وضعیت عکس کالا در فرم true بود آنگاه فقط کالاهایی که عکس دارند بازیابی شود و در غیر این صورت، تنها کالاهایی که دارای عکس نیستند بازیابی شود.

    var data=WorkADOSelect.Execute();

    در این مرحله، Query اجرا شده و کد کالاهای مورد نظر در یک آرایه بنام data ذخیره می شود.

    var codes=[];

    for (var i=0; i

          codes.push(data.mat_Code)

    }

    در این مرحله، مقادیر کد کالاهای موجود در آرایه data را استخراج و در یک آرایه دیگر بنام codes ذخیره می کنیم.

    return JSON.stringify(codes);

    و در انتها، رشته حرفی کد کالاها به فرمت JSON بازگشت داده می شود.

     

    مثال برای ParentFormFieldsJson

    فرض کنید در مثال فوق، انتخابگر حرفی کالاها، یکی از اجزای آرایه باشد و فیلد وضعیت عکس کالا در خارج از آرایه تعیین شود. در این صورت فرم انجام وظیفه به شکل زیر است:

     

    در این حالت، فیلد وضعیت عکس کالا نسبت به انتخابگر حرفی در خارج از آرایه و در ParentFormFieldsJson قرار می گیرد. تابع جستجوی پارامتریک در این حالت بجز سطر اول که رشته حرفی JSON حاوی مقادیر فیلدها در فرم انجام وظیفه را تعیین می کند، دقیقا مشابه با مثال قبلی است. این مورد در تابع زیر با رنگ قرمز مشخص شده است:

    function WorkFieldEditBtnImagedProducts(p) {

        var formFields=JSON.parse(p.ParentFormFieldsJson);

        WorkADOSelect.DBName =  "_AccXP_hamayesh992";

        WorkADOSelect.SelectClause="mat_Code";

        WorkADOSelect.FromClause=" _Mats" ;

        if (kalaImage==1) {

            WorkADOSelect.WhereClause=" mat_Image is not null";

            } else {

             WorkADOSelect.WhereClause=" mat_Image is null";

        }

        var data=WorkADOSelect.Execute();

        var codes=[];

        for (var i=0; i

              codes.push(data.mat_Code)

         }

         return JSON.stringify(codes);

    }

    سوال چالشی: در بسیاری از موارد بجای تعریف یک فیلد و استفاده از آن در فرم انجام وظیفه می توانیم از یک گروه پارامتر استفاده کنیم. برای نمونه در مثال آخر می توانیم بجای فیلد وضعیت عکس کالا، یک گروه پارامتر به همین نام تعریف کنیم و در زمان کلیک روی تکمه انتخاب، مقدار این پارامتر را تعیین کنیم. به نظر شما در این گونه موارد، روش استفاده از FormFieldsJson چه مزایا و معایبی نسبت به روش گروه پارامتر دارد؟

    پيوست ها
    شما مجاز به پاسخ به اين پست نمي باشيد.


    kurtkoy escort
    bostanci escort
    ankara escort
    comendo minha prima gordinha rajini murugan movie hd moglie con due negri calcaterra e lara scena hot mujeres con ropa interior transparente