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