Questionnaires kullanımı ve çalıştırma hakkında bir çok sayfa var web'de. Bu yüzden Questionnaires nedir, nasıl kullanılır konusunda bir şey anlatmayacağım.
KMCollection - Questionnaire kayıtları tablosu. kmCollectionId anahtar alan.
KMVirtualNetworkAnswerTable - Cevaplar tablosu. kmVirtualNetworkAnswerTableId anahtar alan. evaluation alanında failed/passed veya boş olarak sonuç saklı.
KMVirtualNetworkAnswerLine - Cevap satırları tablosu.
Kod ile Questionnaire formu çalıştırma:
KMQuestionnaireRun o = new CrsKMQuestionnaireRun();
o.set(KMQuestionnaireRunMode::All,myKMCollectionId, DirPersonUser::find(curUserId()).party());
o.run();
Kod ile Answer formu çalıştırma:
KMVirtualNetworkAnswerTable answerTable;
Args args = new Args();
RecId recId = DirPersonUser::find(curUserId()).party();
select firstOnly answerTable
where answerTable.kmVirtualNetworkAnswerTableId == this.AnswerId;
args.record(answerTable);args.caller(o);
new MenuFunction(menuItemDisplayStr(KMKnowledgeCollectorUserResults), MenuItemType::Display).run(args);
Questionnaire Idlerini sakladığım kendi formumdan ve tablomdan kod ile Questionnaire formu çalıştırıp oluşan KMVirtualNetworkAnswerTable kaydının ID'sini almak için KMQuestionnaireRun_Win32 sınıfından yeni bir sınıf türettim:
class myKMQuestionnaireRun extends KMQuestionnaireRun_Win32
{
recId myRecId;
}
formu çağırdığım tablonun recId'sini saklamak için bir parm metodu ekledim:
RecId parmMyRecId(RecId _recId = myRecId)
{
myRecId =_recId;
return myRecId;
}
Daha sonra end metodunu türettim:
public void end(KMVirtualNetworkAnswerTableId _kmVirtualNetworkAnswerTableId)
{
myCallerTable tbl; //Questionnaries formunu çağıran tablo
super(_kmVirtualNetworkAnswerTableId);
if (_kmVirtualNetworkAnswerTableId == "")
return;
ttsBegin;
update_recordSet tbl setting AnswerId = _kmVirtualNetworkAnswerTableId
where tbl.RecId == myRecId;
ttsCommit;
}
Ve kendi tablomdan formu bu kodla çağırdım:
...
myKMQuestionnaireRun o = new myKMQuestionnaireRun();
myQTable c;
o.parmMyRecId(this.RecId);
o.set(KMQuestionnaireRunMode::All,this.KMCollectionId, DirPersonUser::find(curUserId()).party());
o.run();
...