====== Створення checkbox в Smart Script ====== {{:smartscript:screenshot_2024-02-23_112539.png?300|}} На потрібній нам сторінці треба створити нове питання з тегом для відображення лінії. Потім на в Script_Open треба додати відмальовування checkboxes функція getChecks() 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()); В моєму випадку це отримання данних з бізнес компонента, та формування checkboxes для вибраних з бізнес компоненту записів. Для кожного checkbox на onclick додається action **check(this.id)**; Сам Action та необхідні функцію прописуються в **getChecksScript()** 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 +=""+bcSMS.GetFieldValue("Product Name")+"
\n"; rec = bcSMS.NextRecord(); } return html; } catch (e) { TheApplication().RaiseErrorText("getChecks error: "+e.toString()); } }
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; } Але не все так просто! Якщо у вас існують перевірки, та відображається TheApplication().RaiseErrorText("") то чекбокси __пропадають__. Перед появою TheApplication().RaiseErrorText("") треба ще раз відмалювати checkboxes в тому стані які вони були до появи TheApplication().RaiseErrorText(""). Script().GetPage("AL_CSP_FIRST_PG").GetQuestion("AL_CSP_PRODUCTS_SMS").SetQuestionText(Script().getChecks()); **Стан checkboxes зберігається в** TheApplication().SetProfileAttr("AL_PROD_SMS_CHECKED_LIST",""); **Кількість обраних checkboxes зберігається в** TheApplication().SetProfileAttr("AL_PROD_SMS_CHECKED_AMOUNT","");