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