Користувальницькі налаштування

Налаштування сайту


smartscript:create_checkboxes

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Порівняння попередніх версійПопередня ревізія
Наступна ревізія
Попередня ревізія
smartscript:create_checkboxes [2024/02/26 18:39] wiki_adminsmartscript:create_checkboxes [2024/02/26 21:02] (поточний) wiki_admin
Рядок 1: Рядок 1:
 +====== Створення checkbox в Smart Script ======
 +{{:smartscript:screenshot_2024-02-23_112539.png?300|}}
 +
 +
 +На потрібній нам сторінці треба створити нове питання з тегом </hr> для відображення лінії. Потім на в Script_Open треба додати відмальовування checkboxes функція getChecks()
 +
 +
 +<code javascript>
 +TheApplication().SetProfileAttr("AL_PROD_SMS_CHECKED_AMOUNT","0");
 +TheApplication().SetProfileAttr("AL_PROD_SMS_CHECKED_LIST","");
 +GetPage("AL_CSP_FIRST_PG").GetQuestion("AL_CSP_PRODUCTS_SMS").SetQuestionText(getChecks());
 +</code>
 +
 +В моєму випадку це отримання данних з бізнес компонента, та формування checkboxes для вибраних з бізнес компоненту записів. Для кожного checkbox на onclick додається action **check(this.id)**; Сам Action та необхідні функцію прописуються в **getChecksScript()**
 +<code javascript>
 +function getChecks()
 +{
 + try {
 + var html ="";
 + var counter = 0;
 + var checked = "";
 + var list = TheApplication().GetProfileAttr("AL_PROD_SMS_CHECKED_LIST");
 + var boSMS = TheApplication().GetBusObject("BO");
 + var bcSMS = boSMS.GetBusComp("BC");
 + bcSMS.ActivateField("Active Flag");
 + bcSMS.ActivateField("Product Name");
 + bcSMS.ActivateField("Template Id");
 + bcSMS.ActivateField("Template Name");
 + bcSMS.ClearToQuery();
 + bcSMS.SetViewMode(3);
 + bcSMS.SetSearchExpr("[Active Flag] = 'Y'");
 + bcSMS.ExecuteQuery(ForwardOnly);
 + var countRecords = bcSMS.CountRecords()
 + var rec = bcSMS.FirstRecord()
 + while(rec){
 + counter = counter+1
 + checked = "";
 + var listArr = list.split(",");
 + for (var ssk = 0; ssk < listArr.length; ssk++) {
 + if (listArr[ssk] == bcSMS.GetFieldValue("Product Name")) {
 + checked = "checked";
 + break;
 + }
 + }
 +
 + html +="<input type=\"checkbox\" id=\"ch"+counter+"\" data-records=\""+countRecords+"\" data-name=\""+bcSMS.GetFieldValue("Product Name")+"\" onclick='с"+getChecksScript() + "' value='' "+checked+"><font id=\"st"+counter+"\">"+bcSMS.GetFieldValue("Product Name")+"</font><br>\n";
 + rec = bcSMS.NextRecord();
 + }
 + return html;
 + } catch (e) {
 + TheApplication().RaiseErrorText("getChecks error: "+e.toString());
 + }
 +}
 +</code>
 +<code javascript>
 +function getChecksScript (){
 + var script = 
 +"function check(id) {\n"+
 +"var amountChecked = 0;\n"+
 +"var valuesChecked = \"\";\n"+
 +"var prof = \"\";\n"+
 +"setProfileAttr(\"AL_PROD_SMS_CHECKED_LIST\",prof);\n"+
 +" for (var i = 0; i < document.getElementById(id).dataset.records; i++) {"+
 +" if(document.getElementById(\"ch\" + (i+1)).checked){\n"+
 +"   amountChecked =amountChecked +1;\n"+
 +"   if(amountChecked==1){\n"+
 +"     prof += document.getElementById(\"ch\" + (i+1)).dataset.name;\n"+
 +"   } else {\n"+
 +"     prof += \",\"+document.getElementById(\"ch\" + (i+1)).dataset.name;\n"+
 +"   }\n"+
 +" }\n"+
 +" }\n"+
 +"setProfileAttr(\"AL_PROD_SMS_CHECKED_AMOUNT\",amountChecked);\n"+
 +"setProfileAttr(\"AL_PROD_SMS_CHECKED_LIST\",prof);\n"+
 +"//console.log(getProfileAttr(\"AL_PROD_SMS_CHECKED_LIST\"));\n"+
 +"//console.log(getProfileAttr(\"AL_PROD_SMS_CHECKED_AMOUNT\"));\n"+
 +"}\n"+
 +"function setProfileAttr(name,val){\n"+
 + if(!IsOpenUI()){\n"+
 +   App().SetProfileAttr(name,val);\n" +
 + } else {\n" +
 +   theApplication().SetProfileAttr(name,val);\n"+
 + }\n"+
 +"}\n"+
 +"function getProfileAttr(name){\n"+
 + var val = \"\";\n"+
 + if(!IsOpenUI()){\n"+
 +   val = App().GetProfileAttr(name);\n" +
 + } else {\n" +
 +   val = theApplication().GetProfileAttr(name);\n"+
 + }\n" +
 + return val;\n"+
 +"}\n";
 + return script;
 +}
 +</code>
 +
 +
 +Але не все так просто!
 +Якщо у вас існують перевірки, та відображається TheApplication().RaiseErrorText("") то чекбокси __пропадають__.
 +
 +Перед появою TheApplication().RaiseErrorText("") треба ще раз відмалювати checkboxes в тому стані які вони були до появи TheApplication().RaiseErrorText("").
 +
 +
 +<code javascript>
 +Script().GetPage("AL_CSP_FIRST_PG").GetQuestion("AL_CSP_PRODUCTS_SMS").SetQuestionText(Script().getChecks());
 +</code>
 +
 +
 +**Стан checkboxes зберігається в**
 +<code javascript>
 +TheApplication().SetProfileAttr("AL_PROD_SMS_CHECKED_LIST","");
 +</code>
 +
 +**Кількість обраних checkboxes зберігається в**
 +<code javascript>
 +TheApplication().SetProfileAttr("AL_PROD_SMS_CHECKED_AMOUNT","");
 +</code>