====== Створення 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","");