Esta funcion carga el Datalist de un textbox con un search a un folder (puede ser un keyword por ej), y agrega a esta lista los valores previamente ingresados en el mismo campo. Es decir, se va ampliando la lista con lo que se carga.
Para implementarlo creamos un Textbox enlazado a un campo, marcamos la opcion Datalist y en el ScriptBeforeRender agregamos:
DatalistExtended this, "/config/listas", "description", "type = 'Sector'"
Sub DatalistExtended(pControl, pFolder, pField, pFormula) Dim sql, rcs, op, dic, fld, dom, node, newVal, i pControl.Load pControl.Options.RemoveAll ' https://www.robvanderwoude.com/vbstech_data_sortedlist.php Set dic = CreateObject("System.Collections.Sortedlist") If TypeName(pFolder) = "Folder" Then Set fld = pFolder Else Set fld = Folder.App.Folders(CStr(pFolder)) End If Set dom = fld.Search(CStr(pField), CStr(pFormula)) For Each node In dom.documentElement.childNodes newVal = node.attributes(0).value If newVal & "" <> "" Then If Not dic.Contains(newVal) Then dic.Add newVal, "" End If Next sql = "select distinct " & pControl.DatalistField & " from SYS_FIELDS_" & pControl.DatalistFolder.Form.Id & _ " f inner join SYS_DOCUMENTS d on f.DOC_ID = d.DOC_ID where d.FLD_ID = " & pControl.DatalistFolder.Id & _ " order by " & pControl.DatalistField Set rcs = dSession.Db.OpenRecordset(CStr(sql)) Do While Not rcs.EOF newVal = rcs(pControl.DatalistField).Value If newVal & "" <> "" Then If Not dic.Contains(newVal) Then dic.Add newVal, "" End If rcs.MoveNext Loop rcs.Close For i = 0 To dic.Count - 1 Set op = pControl.OptionsAdd op.Value = dic.GetKey(i) Next End Sub
No hay comentarios:
Publicar un comentario