Створення checkbox в Smart Script
На потрібній нам сторінці треба створити нове питання з тегом </hr> для відображення лінії. Потім на в 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 +="<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()); } }
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","");

