Commit f796092b77ff16f6f65e43e3493bf1e9a63ff99b
1 parent
5a04a034
WSA-47
"Add Web Service Delphi Contribution" Added. Contributed By: Bjarte Kalstveit Vebjørnsen Committed By: Conrad Vermeulen Reviewed By: Kevin Fourie git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@7323 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
10 changed files
with
3340 additions
and
0 deletions
ktwsapi/delphi/TODO.txt deleted
ktwsapi/delphi/doc/KTWSAPI.chm
0 → 100644
No preview for this file type
ktwsapi/delphi/examples/KTWSAPIExamples.bdsproj
0 → 100644
| 1 | +<?xml version="1.0" encoding="utf-8"?> | |
| 2 | +<BorlandProject> | |
| 3 | + <PersonalityInfo> | |
| 4 | + <Option> | |
| 5 | + <Option Name="Personality">Delphi.Personality</Option> | |
| 6 | + <Option Name="ProjectType">VCLApplication</Option> | |
| 7 | + <Option Name="Version">1.0</Option> | |
| 8 | + <Option Name="GUID">{A7B8ECC5-0F7B-4E7C-8C44-8356FDCDB36A}</Option> | |
| 9 | + </Option> | |
| 10 | + </PersonalityInfo> | |
| 11 | + <Delphi.Personality> | |
| 12 | + <Source> | |
| 13 | + <Source Name="MainSource">KTWSAPIExamples.dpr</Source> | |
| 14 | + </Source> | |
| 15 | + <FileVersion> | |
| 16 | + <FileVersion Name="Version">7.0</FileVersion> | |
| 17 | + </FileVersion> | |
| 18 | + <Compiler> | |
| 19 | + <Compiler Name="A">8</Compiler> | |
| 20 | + <Compiler Name="B">0</Compiler> | |
| 21 | + <Compiler Name="C">1</Compiler> | |
| 22 | + <Compiler Name="D">1</Compiler> | |
| 23 | + <Compiler Name="E">0</Compiler> | |
| 24 | + <Compiler Name="F">0</Compiler> | |
| 25 | + <Compiler Name="G">1</Compiler> | |
| 26 | + <Compiler Name="H">1</Compiler> | |
| 27 | + <Compiler Name="I">1</Compiler> | |
| 28 | + <Compiler Name="J">0</Compiler> | |
| 29 | + <Compiler Name="K">0</Compiler> | |
| 30 | + <Compiler Name="L">1</Compiler> | |
| 31 | + <Compiler Name="M">0</Compiler> | |
| 32 | + <Compiler Name="N">1</Compiler> | |
| 33 | + <Compiler Name="O">1</Compiler> | |
| 34 | + <Compiler Name="P">1</Compiler> | |
| 35 | + <Compiler Name="Q">0</Compiler> | |
| 36 | + <Compiler Name="R">0</Compiler> | |
| 37 | + <Compiler Name="S">0</Compiler> | |
| 38 | + <Compiler Name="T">0</Compiler> | |
| 39 | + <Compiler Name="U">0</Compiler> | |
| 40 | + <Compiler Name="V">1</Compiler> | |
| 41 | + <Compiler Name="W">0</Compiler> | |
| 42 | + <Compiler Name="X">1</Compiler> | |
| 43 | + <Compiler Name="Y">1</Compiler> | |
| 44 | + <Compiler Name="Z">1</Compiler> | |
| 45 | + <Compiler Name="ShowHints">True</Compiler> | |
| 46 | + <Compiler Name="ShowWarnings">True</Compiler> | |
| 47 | + <Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler> | |
| 48 | + <Compiler Name="NamespacePrefix"></Compiler> | |
| 49 | + <Compiler Name="GenerateDocumentation">False</Compiler> | |
| 50 | + <Compiler Name="DefaultNamespace"></Compiler> | |
| 51 | + <Compiler Name="SymbolDeprecated">True</Compiler> | |
| 52 | + <Compiler Name="SymbolLibrary">True</Compiler> | |
| 53 | + <Compiler Name="SymbolPlatform">True</Compiler> | |
| 54 | + <Compiler Name="SymbolExperimental">True</Compiler> | |
| 55 | + <Compiler Name="UnitLibrary">True</Compiler> | |
| 56 | + <Compiler Name="UnitPlatform">True</Compiler> | |
| 57 | + <Compiler Name="UnitDeprecated">True</Compiler> | |
| 58 | + <Compiler Name="UnitExperimental">True</Compiler> | |
| 59 | + <Compiler Name="HResultCompat">True</Compiler> | |
| 60 | + <Compiler Name="HidingMember">True</Compiler> | |
| 61 | + <Compiler Name="HiddenVirtual">True</Compiler> | |
| 62 | + <Compiler Name="Garbage">True</Compiler> | |
| 63 | + <Compiler Name="BoundsError">True</Compiler> | |
| 64 | + <Compiler Name="ZeroNilCompat">True</Compiler> | |
| 65 | + <Compiler Name="StringConstTruncated">True</Compiler> | |
| 66 | + <Compiler Name="ForLoopVarVarPar">True</Compiler> | |
| 67 | + <Compiler Name="TypedConstVarPar">True</Compiler> | |
| 68 | + <Compiler Name="AsgToTypedConst">True</Compiler> | |
| 69 | + <Compiler Name="CaseLabelRange">True</Compiler> | |
| 70 | + <Compiler Name="ForVariable">True</Compiler> | |
| 71 | + <Compiler Name="ConstructingAbstract">True</Compiler> | |
| 72 | + <Compiler Name="ComparisonFalse">True</Compiler> | |
| 73 | + <Compiler Name="ComparisonTrue">True</Compiler> | |
| 74 | + <Compiler Name="ComparingSignedUnsigned">True</Compiler> | |
| 75 | + <Compiler Name="CombiningSignedUnsigned">True</Compiler> | |
| 76 | + <Compiler Name="UnsupportedConstruct">True</Compiler> | |
| 77 | + <Compiler Name="FileOpen">True</Compiler> | |
| 78 | + <Compiler Name="FileOpenUnitSrc">True</Compiler> | |
| 79 | + <Compiler Name="BadGlobalSymbol">True</Compiler> | |
| 80 | + <Compiler Name="DuplicateConstructorDestructor">True</Compiler> | |
| 81 | + <Compiler Name="InvalidDirective">True</Compiler> | |
| 82 | + <Compiler Name="PackageNoLink">True</Compiler> | |
| 83 | + <Compiler Name="PackageThreadVar">True</Compiler> | |
| 84 | + <Compiler Name="ImplicitImport">True</Compiler> | |
| 85 | + <Compiler Name="HPPEMITIgnored">True</Compiler> | |
| 86 | + <Compiler Name="NoRetVal">True</Compiler> | |
| 87 | + <Compiler Name="UseBeforeDef">True</Compiler> | |
| 88 | + <Compiler Name="ForLoopVarUndef">True</Compiler> | |
| 89 | + <Compiler Name="UnitNameMismatch">True</Compiler> | |
| 90 | + <Compiler Name="NoCFGFileFound">True</Compiler> | |
| 91 | + <Compiler Name="ImplicitVariants">True</Compiler> | |
| 92 | + <Compiler Name="UnicodeToLocale">True</Compiler> | |
| 93 | + <Compiler Name="LocaleToUnicode">True</Compiler> | |
| 94 | + <Compiler Name="ImagebaseMultiple">True</Compiler> | |
| 95 | + <Compiler Name="SuspiciousTypecast">True</Compiler> | |
| 96 | + <Compiler Name="PrivatePropAccessor">True</Compiler> | |
| 97 | + <Compiler Name="UnsafeType">False</Compiler> | |
| 98 | + <Compiler Name="UnsafeCode">False</Compiler> | |
| 99 | + <Compiler Name="UnsafeCast">False</Compiler> | |
| 100 | + <Compiler Name="OptionTruncated">True</Compiler> | |
| 101 | + <Compiler Name="WideCharReduced">True</Compiler> | |
| 102 | + <Compiler Name="DuplicatesIgnored">True</Compiler> | |
| 103 | + <Compiler Name="UnitInitSeq">True</Compiler> | |
| 104 | + <Compiler Name="LocalPInvoke">True</Compiler> | |
| 105 | + <Compiler Name="MessageDirective">True</Compiler> | |
| 106 | + <Compiler Name="CodePage"></Compiler> | |
| 107 | + </Compiler> | |
| 108 | + <Linker> | |
| 109 | + <Linker Name="MapFile">0</Linker> | |
| 110 | + <Linker Name="OutputObjs">0</Linker> | |
| 111 | + <Linker Name="GenerateHpps">False</Linker> | |
| 112 | + <Linker Name="ConsoleApp">1</Linker> | |
| 113 | + <Linker Name="DebugInfo">False</Linker> | |
| 114 | + <Linker Name="RemoteSymbols">False</Linker> | |
| 115 | + <Linker Name="GenerateDRC">False</Linker> | |
| 116 | + <Linker Name="MinStackSize">16384</Linker> | |
| 117 | + <Linker Name="MaxStackSize">1048576</Linker> | |
| 118 | + <Linker Name="ImageBase">4194304</Linker> | |
| 119 | + <Linker Name="ExeDescription"></Linker> | |
| 120 | + </Linker> | |
| 121 | + <Directories> | |
| 122 | + <Directories Name="OutputDir"></Directories> | |
| 123 | + <Directories Name="UnitOutputDir"></Directories> | |
| 124 | + <Directories Name="PackageDLLOutputDir"></Directories> | |
| 125 | + <Directories Name="PackageDCPOutputDir"></Directories> | |
| 126 | + <Directories Name="SearchPath"></Directories> | |
| 127 | + <Directories Name="Packages"></Directories> | |
| 128 | + <Directories Name="Conditionals"></Directories> | |
| 129 | + <Directories Name="DebugSourceDirs"></Directories> | |
| 130 | + <Directories Name="UsePackages">False</Directories> | |
| 131 | + </Directories> | |
| 132 | + <Parameters> | |
| 133 | + <Parameters Name="RunParams"></Parameters> | |
| 134 | + <Parameters Name="HostApplication"></Parameters> | |
| 135 | + <Parameters Name="Launcher"></Parameters> | |
| 136 | + <Parameters Name="UseLauncher">False</Parameters> | |
| 137 | + <Parameters Name="DebugCWD"></Parameters> | |
| 138 | + <Parameters Name="Debug Symbols Search Path"></Parameters> | |
| 139 | + <Parameters Name="LoadAllSymbols">True</Parameters> | |
| 140 | + <Parameters Name="LoadUnspecifiedSymbols">False</Parameters> | |
| 141 | + </Parameters> | |
| 142 | + <Language> | |
| 143 | + <Language Name="ActiveLang"></Language> | |
| 144 | + <Language Name="ProjectLang">$00000000</Language> | |
| 145 | + <Language Name="RootDir"></Language> | |
| 146 | + </Language> | |
| 147 | + <VersionInfo> | |
| 148 | + <VersionInfo Name="IncludeVerInfo">False</VersionInfo> | |
| 149 | + <VersionInfo Name="AutoIncBuild">False</VersionInfo> | |
| 150 | + <VersionInfo Name="MajorVer">1</VersionInfo> | |
| 151 | + <VersionInfo Name="MinorVer">0</VersionInfo> | |
| 152 | + <VersionInfo Name="Release">0</VersionInfo> | |
| 153 | + <VersionInfo Name="Build">0</VersionInfo> | |
| 154 | + <VersionInfo Name="Debug">False</VersionInfo> | |
| 155 | + <VersionInfo Name="PreRelease">False</VersionInfo> | |
| 156 | + <VersionInfo Name="Special">False</VersionInfo> | |
| 157 | + <VersionInfo Name="Private">False</VersionInfo> | |
| 158 | + <VersionInfo Name="DLL">False</VersionInfo> | |
| 159 | + <VersionInfo Name="Locale">1044</VersionInfo> | |
| 160 | + <VersionInfo Name="CodePage">1252</VersionInfo> | |
| 161 | + </VersionInfo> | |
| 162 | + <VersionInfoKeys> | |
| 163 | + <VersionInfoKeys Name="CompanyName"></VersionInfoKeys> | |
| 164 | + <VersionInfoKeys Name="FileDescription"></VersionInfoKeys> | |
| 165 | + <VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys> | |
| 166 | + <VersionInfoKeys Name="InternalName"></VersionInfoKeys> | |
| 167 | + <VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys> | |
| 168 | + <VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys> | |
| 169 | + <VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys> | |
| 170 | + <VersionInfoKeys Name="ProductName"></VersionInfoKeys> | |
| 171 | + <VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys> | |
| 172 | + <VersionInfoKeys Name="Comments"></VersionInfoKeys> | |
| 173 | + </VersionInfoKeys> <Excluded_Packages> | |
| 174 | + <Excluded_Packages Name="C:\Programfiler\Fellesfiler\RemObjects Software\Everwood\Bin\RemObjects_Everwood_D10.bpl">RemObjects Everwood for Delphi</Excluded_Packages> | |
| 175 | + <Excluded_Packages Name="C:\Programfiler\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_Core_D10.bpl">RemObjects SDK - Core Library</Excluded_Packages> | |
| 176 | + <Excluded_Packages Name="C:\Programfiler\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_WebBroker_D10.bpl">RemObjects SDK - WebBroker Library</Excluded_Packages> | |
| 177 | + <Excluded_Packages Name="C:\Programfiler\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_RODX_D10.bpl">RemObjects SDK - RODXSock Library</Excluded_Packages> | |
| 178 | + <Excluded_Packages Name="C:\Programfiler\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_BPDX_D10.bpl">RemObjects SDK - BPDX Library</Excluded_Packages> | |
| 179 | + <Excluded_Packages Name="C:\Programfiler\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_DataSnap_D10.bpl">RemObjects SDK - DataSnap Integration Pack</Excluded_Packages> | |
| 180 | + <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Pascal Script\Dcu\D10\PascalScript_Core_D10.bpl">RemObjects Pascal Script - Core Package</Excluded_Packages> | |
| 181 | + <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Pascal Script\Dcu\D10\PascalScript_RO_D10.bpl">RemObjects Pascal Script - RemObjects SDK 3.0 Integration</Excluded_Packages> | |
| 182 | + <Excluded_Packages Name="C:\Programfiler\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_Indy_D10.bpl">RemObjects SDK - Indy Library</Excluded_Packages> | |
| 183 | + <Excluded_Packages Name="C:\Programfiler\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_IDE_D10.bpl">RemObjects SDK - IDE Integration for Win32</Excluded_Packages> | |
| 184 | + <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_Core_D10.bpl">RemObjects Data Abstract - Core Library</Excluded_Packages> | |
| 185 | + <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_IDE_D10.bpl">RemObjects Data Abstract - IDE Package</Excluded_Packages> | |
| 186 | + <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_ADODriver_D10.bpl">RemObjects Data Abstract - ADOExpress/dbGo Driver</Excluded_Packages> | |
| 187 | + <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_IBXDriver_D10.bpl">RemObjects Data Abstract - InterBase Express Driver</Excluded_Packages> | |
| 188 | + <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_DBXDriver_D10.bpl">RemObjects Data Abstract - dbExpress Driver</Excluded_Packages> | |
| 189 | + <Excluded_Packages Name="C:\Programfiler\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_Scripting_D10.bpl">RemObjects Data Abstract - Scripting Integration Library</Excluded_Packages> | |
| 190 | + </Excluded_Packages> | |
| 191 | + </Delphi.Personality> | |
| 192 | + <StarTeamAssociation></StarTeamAssociation> | |
| 193 | + <StarTeamNonRelativeFiles></StarTeamNonRelativeFiles> | |
| 194 | +</BorlandProject> | ... | ... |
ktwsapi/delphi/examples/KTWSAPIExamples.dpr
0 → 100644
| 1 | +{ | |
| 2 | + Copyright (c) 2007, The Jam Warehouse Software (Pty) Ltd. | |
| 3 | + | |
| 4 | + All rights reserved. | |
| 5 | + | |
| 6 | + Redistribution and use in source and binary forms, with or without | |
| 7 | + modification, are permitted provided that the following conditions are met: | |
| 8 | + | |
| 9 | + i) Redistributions of source code must retain the above copyright notice, | |
| 10 | + this list of conditions and the following disclaimer. | |
| 11 | + ii) Redistributions in binary form must reproduce the above copyright | |
| 12 | + notice, this list of conditions and the following disclaimer in the | |
| 13 | + documentation and/or other materials provided with the distribution. | |
| 14 | + iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the | |
| 15 | + names of its contributors may be used to endorse or promote products | |
| 16 | + derived from this software without specific prior written permission. | |
| 17 | + | |
| 18 | + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
| 19 | + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
| 20 | + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
| 21 | + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |
| 22 | + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | |
| 23 | + EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, | |
| 24 | + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
| 25 | + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
| 26 | + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING | |
| 27 | + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
| 28 | + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 29 | +} | |
| 30 | + | |
| 31 | +{* | |
| 32 | + This is a Delphi port of the php api for KnowledgeTree WebService. | |
| 33 | + | |
| 34 | + @Author Bjarte Kalstveit Vebjørnsen <bjarte@macaos.com> | |
| 35 | + @Version 1.0 BKV 24.09.2007 Initial revision | |
| 36 | +*} | |
| 37 | + | |
| 38 | + | |
| 39 | +program KTWSAPIExamples; | |
| 40 | + | |
| 41 | +uses | |
| 42 | + Forms, | |
| 43 | + uFolderContentExample in 'uFolderContentExample.pas' {FolderContentExample}, | |
| 44 | + uwebservice in '..\uwebservice.pas', | |
| 45 | + uktwsapi in '..\uktwsapi.pas', | |
| 46 | + uPHPserialize in '..\uPHPserialize.pas'; | |
| 47 | + | |
| 48 | +{$R *.res} | |
| 49 | + | |
| 50 | +begin | |
| 51 | + Application.Initialize; | |
| 52 | + Application.CreateForm(TFolderContentExample, FolderContentExample); | |
| 53 | + Application.Run; | |
| 54 | +end. | |
| 55 | + | ... | ... |
ktwsapi/delphi/examples/KTWSAPIExamples.res
0 → 100644
No preview for this file type
ktwsapi/delphi/examples/uFolderContentExample.dfm
0 → 100644
| 1 | +object FolderContentExample: TFolderContentExample | |
| 2 | + Left = 0 | |
| 3 | + Top = 0 | |
| 4 | + Caption = 'FolderContentExample' | |
| 5 | + ClientHeight = 538 | |
| 6 | + ClientWidth = 219 | |
| 7 | + Color = clBtnFace | |
| 8 | + Font.Charset = DEFAULT_CHARSET | |
| 9 | + Font.Color = clWindowText | |
| 10 | + Font.Height = -11 | |
| 11 | + Font.Name = 'Tahoma' | |
| 12 | + Font.Style = [] | |
| 13 | + OldCreateOrder = False | |
| 14 | + PixelsPerInch = 96 | |
| 15 | + TextHeight = 13 | |
| 16 | + object tvFolderList: TTreeView | |
| 17 | + AlignWithMargins = True | |
| 18 | + Left = 3 | |
| 19 | + Top = 34 | |
| 20 | + Width = 213 | |
| 21 | + Height = 501 | |
| 22 | + Align = alClient | |
| 23 | + Images = ImageList4 | |
| 24 | + Indent = 19 | |
| 25 | + TabOrder = 0 | |
| 26 | + OnCollapsed = tvFolderListCollapsed | |
| 27 | + OnExpanded = tvFolderListExpanded | |
| 28 | + end | |
| 29 | + object Button1: TButton | |
| 30 | + AlignWithMargins = True | |
| 31 | + Left = 3 | |
| 32 | + Top = 3 | |
| 33 | + Width = 213 | |
| 34 | + Height = 25 | |
| 35 | + Align = alTop | |
| 36 | + Caption = 'Populate folders' | |
| 37 | + TabOrder = 1 | |
| 38 | + OnClick = Button1Click | |
| 39 | + end | |
| 40 | + object ImageList4: TImageList | |
| 41 | + Left = 8 | |
| 42 | + Top = 496 | |
| 43 | + Bitmap = { | |
| 44 | + 494C010102000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 | |
| 45 | + 0000000000003600000028000000400000001000000001002000000000000010 | |
| 46 | + 00000000000000000000000000000000000000000000078DBE00078DBE00078D | |
| 47 | + BE00078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078D | |
| 48 | + BE00078DBE00078DBE00000000000000000000000000078DBE00078DBE00078D | |
| 49 | + BE00078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078D | |
| 50 | + BE00078DBE000000000000000000000000000000000000000000000000000000 | |
| 51 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 52 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 53 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 54 | + 000000000000000000000000000000000000078DBE0063CBF800078DBE00A3E1 | |
| 55 | + FB0066CDF90065CDF80065CDF90065CDF90065CDF80065CDF90065CDF80066CD | |
| 56 | + F8003AADD800ACE7F500078DBE0000000000078DBE0025A1D10071C6E80084D7 | |
| 57 | + FA0066CDF90065CDF90065CDF90065CDF90065CDF80065CDF90065CDF80066CE | |
| 58 | + F9003AADD8001999C90000000000000000000000000000000000000000000000 | |
| 59 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 60 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 61 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 62 | + 000000000000000000000000000000000000078DBE006AD1F900078DBE00A8E5 | |
| 63 | + FC006FD4FA006FD4F9006ED4FA006FD4F9006FD4FA006FD4FA006FD4FA006ED4 | |
| 64 | + F9003EB1D900B1EAF500078DBE0000000000078DBE004CBCE70039A8D100A0E2 | |
| 65 | + FB006FD4FA006FD4F9006ED4FA006FD4F9006FD4FA006FD4FA006FD4FA006ED4 | |
| 66 | + F9003EB1D900C9F0F300078DBE00000000000000000000000000000000000000 | |
| 67 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 68 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 69 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 70 | + 000000000000000000000000000000000000078DBE0072D6FA00078DBE00AEEA | |
| 71 | + FC0079DCFB0079DCFB0079DCFB0079DCFB0079DCFB007ADCFB0079DCFA0079DC | |
| 72 | + FA0044B5D900B6EEF600078DBE0000000000078DBE0072D6FA00078DBE00AEE9 | |
| 73 | + FC0079DCFB0079DCFB0079DCFB0079DCFB0079DCFB007ADCFB0079DCFA0079DC | |
| 74 | + FA0044B5D900C9F0F300078DBE00000000000000000000000000000000000000 | |
| 75 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 76 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 77 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 78 | + 000000000000000000000000000000000000078DBE0079DDFB00078DBE00B5EE | |
| 79 | + FD0083E4FB0084E4FB0083E4FC0083E4FC0084E4FC0083E4FC0083E4FB0084E5 | |
| 80 | + FC0048B9DA00BBF2F600078DBE0000000000078DBE0079DDFB001899C7009ADF | |
| 81 | + F30092E7FC0084E4FB0083E4FC0083E4FC0084E4FC0083E4FC0083E4FB0084E5 | |
| 82 | + FC0048B9DA00C9F0F3001496C400000000000000000000000000000000000000 | |
| 83 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 84 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 85 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 86 | + 000000000000000000000000000000000000078DBE0082E3FC00078DBE00BAF3 | |
| 87 | + FD008DEBFC008DEBFC008DEBFC008DEBFD008DEBFD008DEBFC008DEBFD008DEB | |
| 88 | + FC004CBBDA00BEF4F700078DBE0000000000078DBE0082E3FC0043B7DC0065C2 | |
| 89 | + E000ABF0FC008DEBFC008DEBFC008DEBFD008DEBFD008DEBFC008DEBFD008DEB | |
| 90 | + FC004CBBDA00C9F0F300C9F0F300078DBE000000000000000000000000000000 | |
| 91 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 92 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 93 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 94 | + 000000000000000000000000000000000000078DBE008AEAFC00078DBE00FFFF | |
| 95 | + FF00C9F7FE00C8F7FE00C9F7FE00C9F7FE00C9F7FE00C8F7FE00C9F7FE00C8F7 | |
| 96 | + FE009BD5E700DEF9FB00078DBE0000000000078DBE008AEAFC0077DCF300219C | |
| 97 | + C700FEFFFF00C8F7FD00C9F7FD00C9F7FD00C9F7FE00C8F7FE00C9F7FD00C8F7 | |
| 98 | + FE009BD5E600EAFEFE00D2F3F800078DBE000000000000000000000000000000 | |
| 99 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 100 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 101 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 102 | + 000000000000000000000000000000000000078DBE0093F0FE00078DBE00078D | |
| 103 | + BE00078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078D | |
| 104 | + BE00078DBE00078DBE00078DBE0000000000078DBE0093F0FE0093F0FD001697 | |
| 105 | + C500078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078DBE00078D | |
| 106 | + BE00078DBE00078DBE00078DBE00078DBE000000000000000000000000000000 | |
| 107 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 108 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 109 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 110 | + 000000000000000000000000000000000000078DBE009BF5FE009AF6FE009AF6 | |
| 111 | + FE009BF5FD009BF6FE009AF6FE009BF5FE009AF6FD009BF5FE009AF6FE009AF6 | |
| 112 | + FE000989BA00000000000000000000000000078DBE009BF5FE009AF6FE009AF6 | |
| 113 | + FE009BF5FD009BF6FE009AF6FE009BF5FE009AF6FD009BF5FE009AF6FE009AF6 | |
| 114 | + FE000989BA000000000000000000000000000000000000000000000000000000 | |
| 115 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 116 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 117 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 118 | + 000000000000000000000000000000000000078DBE00FEFEFE00A0FBFF00A0FB | |
| 119 | + FE00A0FBFE00A1FAFE00A1FBFE00A0FAFE00A1FBFE00A1FBFF00A0FBFF00A1FB | |
| 120 | + FF000989BA00000000000000000000000000078DBE00FEFEFE00A0FBFF00A0FB | |
| 121 | + FE00A0FBFE00A1FAFE00A1FBFE00A0FAFE00A1FBFE00A1FBFF00A0FBFF00A1FB | |
| 122 | + FF000989BA000000000000000000000000000000000000000000000000000000 | |
| 123 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 124 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 125 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 126 | + 00000000000000000000000000000000000000000000078DBE00FEFEFE00A5FE | |
| 127 | + FF00A5FEFF00A5FEFF00078DBE00078DBE00078DBE00078DBE00078DBE00078D | |
| 128 | + BE000000000000000000000000000000000000000000078DBE00FEFEFE00A5FE | |
| 129 | + FF00A5FEFF00A5FEFF00078DBE00078DBE00078DBE00078DBE00078DBE00078D | |
| 130 | + BE00000000000000000000000000000000000000000000000000000000000000 | |
| 131 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 132 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 133 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 134 | + 0000000000000000000000000000000000000000000000000000078DBE00078D | |
| 135 | + BE00078DBE00078DBE0000000000000000000000000000000000000000000000 | |
| 136 | + 0000000000000000000000000000000000000000000000000000078DBE00078D | |
| 137 | + BE00078DBE00078DBE0000000000000000000000000000000000000000000000 | |
| 138 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 139 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 140 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 141 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 142 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 143 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 144 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 145 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 146 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 147 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 148 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 149 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 150 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 151 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 152 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 153 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 154 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 155 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 156 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 157 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 158 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 159 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 160 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 161 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 162 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 163 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 164 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 165 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 166 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 167 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 168 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 169 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 170 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 171 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 172 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 173 | + 0000000000000000000000000000000000000000000000000000000000000000 | |
| 174 | + 000000000000000000000000000000000000424D3E000000000000003E000000 | |
| 175 | + 2800000040000000100000000100010000000000800000000000000000000000 | |
| 176 | + 000000000000000000000000FFFFFF0080038007000000000001000300000000 | |
| 177 | + 0001000100000000000100010000000000010001000000000001000000000000 | |
| 178 | + 0001000000000000000100000000000000070007000000000007000700000000 | |
| 179 | + 800F800F00000000C3FFC3FF00000000FFFFFFFF00000000FFFFFFFF00000000 | |
| 180 | + FFFFFFFF00000000FFFFFFFF0000000000000000000000000000000000000000 | |
| 181 | + 000000000000} | |
| 182 | + end | |
| 183 | +end | ... | ... |
ktwsapi/delphi/examples/uFolderContentExample.pas
0 → 100644
| 1 | +unit uFolderContentExample; | |
| 2 | + | |
| 3 | +interface | |
| 4 | + | |
| 5 | +uses | |
| 6 | + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, | |
| 7 | + Dialogs, uKtwsapi, uWebService, ImgList, ComCtrls, StdCtrls; | |
| 8 | + | |
| 9 | +type | |
| 10 | + TFolderContentExample = class(TForm) | |
| 11 | + tvFolderList: TTreeView; | |
| 12 | + ImageList4: TImageList; | |
| 13 | + Button1: TButton; | |
| 14 | + procedure Button1Click(Sender: TObject); | |
| 15 | + procedure tvFolderListCollapsed(Sender: TObject; Node: TTreeNode); | |
| 16 | + procedure tvFolderListExpanded(Sender: TObject; Node: TTreeNode); | |
| 17 | + private | |
| 18 | + { Private declarations } | |
| 19 | + FIsPopulating: Boolean; | |
| 20 | + procedure PopulateTreeView(items: kt_folder_items; | |
| 21 | + parent: TTreeNode; tv: TTreeView); | |
| 22 | + public | |
| 23 | + { Public declarations } | |
| 24 | + end; | |
| 25 | + | |
| 26 | +var | |
| 27 | + FolderContentExample: TFolderContentExample; | |
| 28 | + UserName, Password: String; | |
| 29 | + | |
| 30 | +implementation | |
| 31 | + | |
| 32 | +{$R *.dfm} | |
| 33 | + | |
| 34 | +procedure TFolderContentExample.Button1Click(Sender: TObject); | |
| 35 | +var | |
| 36 | + ktapi: TKTWSAPI; | |
| 37 | + folder: TKTWSAPI_Folder; | |
| 38 | + contents: kt_folder_contents; | |
| 39 | +begin | |
| 40 | + if FIsPopulating then Exit; | |
| 41 | + | |
| 42 | + Screen.Cursor := crHourglass; | |
| 43 | + | |
| 44 | + FIsPopulating := True; | |
| 45 | + ktapi := TKTWSAPI.Create; | |
| 46 | + try | |
| 47 | + ktapi.SetDownloadPath(ExtractFileDir(Application.ExeName)); | |
| 48 | + ktapi.StartSession(UserName,Password); | |
| 49 | + | |
| 50 | + folder:= ktapi.GetRootFolder; | |
| 51 | + try | |
| 52 | + contents := folder.GetListing(10); | |
| 53 | + try | |
| 54 | + PopulateTreeView(contents.items, nil, tvFolderList); | |
| 55 | + finally | |
| 56 | + contents.Free; | |
| 57 | + end; | |
| 58 | + finally | |
| 59 | + folder.Free; | |
| 60 | + end; | |
| 61 | + | |
| 62 | + ktapi.Logout; | |
| 63 | + finally | |
| 64 | + ktapi.Free; | |
| 65 | + Screen.Cursor := crDefault; | |
| 66 | + FIsPopulating := False; | |
| 67 | + end; | |
| 68 | +end; | |
| 69 | + | |
| 70 | +procedure TFolderContentExample.PopulateTreeView(items: kt_folder_items; parent: TTreeNode; | |
| 71 | + tv: TTreeView); | |
| 72 | +var | |
| 73 | + I: Integer; | |
| 74 | + node: TTreeNode; | |
| 75 | + it: kt_folder_item; | |
| 76 | +begin | |
| 77 | + for I := 0 to Length(items) - 1 do | |
| 78 | + begin | |
| 79 | + it := items[i]; | |
| 80 | + if it.item_type <> 'F' then Continue; | |
| 81 | + node := tv.Items.AddChild(parent, it.title); | |
| 82 | + node.ImageIndex := 0; | |
| 83 | + node.Data := it; | |
| 84 | + if (Length(it.items) > 0) then | |
| 85 | + PopulateTreeView(it.items, node, tv); | |
| 86 | + end; | |
| 87 | +end; | |
| 88 | + | |
| 89 | +procedure TFolderContentExample.tvFolderListCollapsed(Sender: TObject; | |
| 90 | + Node: TTreeNode); | |
| 91 | +begin | |
| 92 | + Node.ImageIndex := 0; | |
| 93 | +end; | |
| 94 | + | |
| 95 | +procedure TFolderContentExample.tvFolderListExpanded(Sender: TObject; | |
| 96 | + Node: TTreeNode); | |
| 97 | +begin | |
| 98 | + Node.ImageIndex := 1; | |
| 99 | +end; | |
| 100 | + | |
| 101 | +initialization | |
| 102 | + UserName := 'xxxx'; | |
| 103 | + Password := 'xxxx'; | |
| 104 | + uktwsapi.KTWebServerUrl := 'http://ktdms.trunk'; | |
| 105 | + uktwsapi.KTWebServiceUrl := uktwsapi.KTWebServerUrl+'/ktwebservice/webservice.php?wsdl'; | |
| 106 | + uktwsapi.KTUploadUrl := uktwsapi.KTWebServerUrl+'/ktwebservice/upload.php'; | |
| 107 | + | |
| 108 | +end. | ... | ... |
ktwsapi/delphi/uPHPserialize.pas
0 → 100644
| 1 | +{ | |
| 2 | + Copyright (c) 2007, The Jam Warehouse Software (Pty) Ltd. | |
| 3 | + | |
| 4 | + All rights reserved. | |
| 5 | + | |
| 6 | + Redistribution and use in source and binary forms, with or without | |
| 7 | + modification, are permitted provided that the following conditions are met: | |
| 8 | + | |
| 9 | + i) Redistributions of source code must retain the above copyright notice, | |
| 10 | + this list of conditions and the following disclaimer. | |
| 11 | + ii) Redistributions in binary form must reproduce the above copyright | |
| 12 | + notice, this list of conditions and the following disclaimer in the | |
| 13 | + documentation and/or other materials provided with the distribution. | |
| 14 | + iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the | |
| 15 | + names of its contributors may be used to endorse or promote products | |
| 16 | + derived from this software without specific prior written permission. | |
| 17 | + | |
| 18 | + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
| 19 | + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
| 20 | + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
| 21 | + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |
| 22 | + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | |
| 23 | + EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, | |
| 24 | + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
| 25 | + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
| 26 | + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING | |
| 27 | + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
| 28 | + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 29 | +} | |
| 30 | + | |
| 31 | +{* | |
| 32 | + A helper unit to unserialize a php serialized string | |
| 33 | + | |
| 34 | + Inspired by the various implementaions presented here | |
| 35 | + http://www.phpguru.org/static/PHP_Unserialize.html | |
| 36 | + | |
| 37 | + @Author Bjarte Kalstveit Vebjørnsen <bjarte@macaos.com> | |
| 38 | + @Version 1.0 BKV 24.09.2007 Initial revision | |
| 39 | + @Todo A complementary serializing function would be nice | |
| 40 | +*} | |
| 41 | + | |
| 42 | +unit uPHPSerialize; | |
| 43 | + | |
| 44 | +interface | |
| 45 | + | |
| 46 | +uses | |
| 47 | + Classes, SysUtils, Variants, ComCtrls; | |
| 48 | + | |
| 49 | +type | |
| 50 | + TPHPValue = class; | |
| 51 | + TPHPArray = class; | |
| 52 | + TPHPSerialize = class; | |
| 53 | + | |
| 54 | + /// a single hash element | |
| 55 | + TPHPHashElement = record | |
| 56 | + Key: TPHPValue; /// The Key part of the element | |
| 57 | + Value: TPHPValue; /// The Value part of the element | |
| 58 | + end; | |
| 59 | + | |
| 60 | + /// an array of hash elements | |
| 61 | + TPHPHashedElementArray = array of TPHPHashElement; | |
| 62 | + | |
| 63 | + /// Tries to replicate a php array by accessing values through strings | |
| 64 | + /// @Todo: Add support for numeric keys | |
| 65 | + TPHPArray = class | |
| 66 | + private | |
| 67 | + FElements: TPHPHashedElementArray; /// array of hash elements | |
| 68 | + function GetValue(Key: string): TPHPValue; overload; | |
| 69 | + function GetValue(Key: TPHPValue): TPHPValue; overload; | |
| 70 | + procedure SetValue(Key: TPHPValue; VValue: TPHPValue); overload; | |
| 71 | + function GetCount: Integer; | |
| 72 | + function Getempty: Boolean; | |
| 73 | + public | |
| 74 | + property Value[Key: string]: TPHPValue read GetValue; default; | |
| 75 | + property Value[Key: TPHPValue]: TPHPValue read GetValue write SetValue; default; | |
| 76 | + property Count: Integer read GetCount; | |
| 77 | + property Empty: Boolean read Getempty; | |
| 78 | + procedure Clear; | |
| 79 | + constructor Create; | |
| 80 | + destructor Destroy; override; | |
| 81 | + end; | |
| 82 | + | |
| 83 | + /// Tries to represent a PHP value of any type | |
| 84 | + TPHPValue = class | |
| 85 | + private | |
| 86 | + FObj: TObject; /// Holds value if it's an object or array | |
| 87 | + FValue: String; /// Holds value if it's something else | |
| 88 | + procedure Clear; | |
| 89 | + public | |
| 90 | + constructor Create(Value: TObject); overload; | |
| 91 | + constructor Create(Value: String); overload; | |
| 92 | + destructor Destroy; override; | |
| 93 | + function AsString: String; | |
| 94 | + function AsDouble: Double; | |
| 95 | + function AsInteger: Integer; | |
| 96 | + function AsObject: TObject; | |
| 97 | + function AsArray: TPHPArray; | |
| 98 | + function AsBoolean: Boolean; | |
| 99 | + end; | |
| 100 | + | |
| 101 | + /// Class for unserializing a php serialized string | |
| 102 | + TPHPSerialize = class | |
| 103 | + private | |
| 104 | + function GetLength(Data: String): Integer; | |
| 105 | + function GetIntLength(Value: Integer): Integer; | |
| 106 | + public | |
| 107 | + class function Unserialize(Data: String): TPHPValue; | |
| 108 | + function _Unserialize(var Data: String): TPHPValue; | |
| 109 | + end; | |
| 110 | + | |
| 111 | +implementation | |
| 112 | + | |
| 113 | +{ TPHPSerialize } | |
| 114 | + | |
| 115 | +{* | |
| 116 | + Finds the length of they to the type | |
| 117 | + | |
| 118 | + @param string Data | |
| 119 | + @return integer | |
| 120 | +*} | |
| 121 | +function TPHPSerialize.GetLength(Data: String): Integer; | |
| 122 | +begin | |
| 123 | + Data := Copy(Data, 3, Length(Data)); | |
| 124 | + | |
| 125 | + Result := StrToIntDef(Copy(Data, 0, Pos(':', Data)-1), 0); | |
| 126 | +end; | |
| 127 | + | |
| 128 | +{* | |
| 129 | + Finds the lenght of the character-space the value occupies | |
| 130 | + | |
| 131 | + @param integer Value | |
| 132 | + @return Integer | |
| 133 | +*} | |
| 134 | +function TPHPSerialize.GetIntLength(Value: Integer): Integer; | |
| 135 | +begin | |
| 136 | + Result := Length(IntToStr(Value)); | |
| 137 | +end; | |
| 138 | + | |
| 139 | +{* | |
| 140 | + Helper function to use this class statically | |
| 141 | + | |
| 142 | + @param integer Value | |
| 143 | + @return Integer | |
| 144 | +*} | |
| 145 | +class function TPHPSerialize.Unserialize(Data: String): TPHPValue; | |
| 146 | +var | |
| 147 | + obj: TPHPSerialize; | |
| 148 | +begin | |
| 149 | + obj := TPHPSerialize.Create; | |
| 150 | + try | |
| 151 | + Result := obj._Unserialize(Data); | |
| 152 | + finally | |
| 153 | + obj.Free; | |
| 154 | + end; | |
| 155 | +end; | |
| 156 | + | |
| 157 | +{* | |
| 158 | + Recursing function for unserializing a string and creating a php value from it | |
| 159 | + | |
| 160 | + @see TPHPValue | |
| 161 | + @param Data String | |
| 162 | + @return TPHPValue | |
| 163 | +*} | |
| 164 | +function TPHPSerialize._Unserialize(var Data: String): TPHPValue; | |
| 165 | +var | |
| 166 | + I, Len: Integer; | |
| 167 | + Num: Double; | |
| 168 | + C: String; | |
| 169 | + Arr: TPHPArray; | |
| 170 | + Key, Value: TPHPValue; | |
| 171 | +begin | |
| 172 | + C := Copy(Data,0,1); | |
| 173 | + | |
| 174 | + if (C = 'a') then | |
| 175 | + begin | |
| 176 | + Len := GetLength(Data); | |
| 177 | + Data := Copy(Data, GetIntLength(Len) + 5, Length(Data) ); | |
| 178 | + | |
| 179 | + Arr := TPHPArray.Create; | |
| 180 | + for I := 0 to Len-1 do | |
| 181 | + begin | |
| 182 | + Key := _Unserialize(Data); | |
| 183 | + Value := _Unserialize(Data); | |
| 184 | + | |
| 185 | + Arr[Key] := Value; | |
| 186 | + end; | |
| 187 | + | |
| 188 | + Data := Copy(Data, Length(Data)); | |
| 189 | + Result := TPHPValue.Create(Arr); | |
| 190 | + | |
| 191 | + end else if (C = 's') then | |
| 192 | + begin | |
| 193 | + Len := GetLength(Data); | |
| 194 | + Result := TPHPValue.Create(Copy(Data, GetIntLength(Len) + 5, Len)); | |
| 195 | + Data := Copy(Data, GetIntLength(Len) + 7 + Len, Length(Data)); | |
| 196 | + end else if (C = 'i') or (C = 'd') then | |
| 197 | + begin | |
| 198 | + Num := StrToFloat(Copy(Data, 3, AnsiPos(';', Data)-3)); | |
| 199 | + Result := TPHPValue.Create(FloatToStr(Num)); | |
| 200 | + Data := Copy(Data, Length(FloatToStr(Num)) + 4, Length(Data)); | |
| 201 | + end else if (C = 'b') then | |
| 202 | + begin | |
| 203 | + Result := TPHPValue.Create(BoolToStr(Copy(Data, 3, 1) = '1')); | |
| 204 | + Data := Copy(Data, 4, Length(Data)); | |
| 205 | + end else if (C = 'O') or (C = 'r') or (C = 'C') or (C = 'R') | |
| 206 | + or (C = 'U') then | |
| 207 | + begin | |
| 208 | + raise Exception.Create('Unsupported PHP data type found!'); | |
| 209 | + end else if (C = 'N') then | |
| 210 | + begin | |
| 211 | + Result := TPHPValue.Create(nil); | |
| 212 | + Data := Copy(Data, 2, Length(Data)); | |
| 213 | + end else | |
| 214 | + begin | |
| 215 | + Result := TPHPValue.Create(nil); | |
| 216 | + Data := ''; | |
| 217 | + end; | |
| 218 | +end; | |
| 219 | + | |
| 220 | + | |
| 221 | +{ TPHPValue } | |
| 222 | + | |
| 223 | +{* | |
| 224 | + Returns value as boolan | |
| 225 | + | |
| 226 | + @return boolean value | |
| 227 | +*} | |
| 228 | +function TPHPValue.AsBoolean: Boolean; | |
| 229 | +begin | |
| 230 | + Result := StrToBool(FValue); | |
| 231 | +end; | |
| 232 | + | |
| 233 | +{* | |
| 234 | + Returns value as double | |
| 235 | + | |
| 236 | + @return double value | |
| 237 | +*} | |
| 238 | +function TPHPValue.AsDouble: Double; | |
| 239 | +begin | |
| 240 | + Result := StrToFloat(FValue); | |
| 241 | +end; | |
| 242 | + | |
| 243 | +{* | |
| 244 | + Returns value as an associative-array | |
| 245 | + | |
| 246 | + @return associative-array | |
| 247 | +*} | |
| 248 | +function TPHPValue.AsArray: TPHPArray; | |
| 249 | +begin | |
| 250 | + Result := nil; | |
| 251 | + Assert(Assigned(FObj)); | |
| 252 | + | |
| 253 | + if (FObj.ClassType = TPHPArray) then | |
| 254 | + Result := TPHPArray(FObj); | |
| 255 | +end; | |
| 256 | + | |
| 257 | +{* | |
| 258 | + Returns value as an integer | |
| 259 | + | |
| 260 | + @return integer value | |
| 261 | +*} | |
| 262 | +function TPHPValue.AsInteger: Integer; | |
| 263 | +begin | |
| 264 | + Result := StrToInt(FValue); | |
| 265 | +end; | |
| 266 | + | |
| 267 | +{* | |
| 268 | + Returns value as an object | |
| 269 | + | |
| 270 | + @return object value | |
| 271 | +*} | |
| 272 | +function TPHPValue.AsObject: TObject; | |
| 273 | +begin | |
| 274 | + Assert(Assigned(FObj)); | |
| 275 | + Result := FObj; | |
| 276 | +end; | |
| 277 | + | |
| 278 | +{* | |
| 279 | + Returns value as a string | |
| 280 | + | |
| 281 | + @return string value | |
| 282 | +*} | |
| 283 | +function TPHPValue.AsString: String; | |
| 284 | +begin | |
| 285 | + Result := FValue; | |
| 286 | +end; | |
| 287 | + | |
| 288 | +{* | |
| 289 | + Constructor | |
| 290 | + | |
| 291 | + @param Value Value to store | |
| 292 | +*} | |
| 293 | +constructor TPHPValue.Create(Value: String); | |
| 294 | +begin | |
| 295 | + Clear; | |
| 296 | + FValue := Value; | |
| 297 | +end; | |
| 298 | + | |
| 299 | +{* | |
| 300 | + Constructor | |
| 301 | + | |
| 302 | + @param Value Value to store | |
| 303 | +*} | |
| 304 | +constructor TPHPValue.Create(Value: TObject); | |
| 305 | +begin | |
| 306 | + Clear; | |
| 307 | + FObj := Value; | |
| 308 | +end; | |
| 309 | + | |
| 310 | +{* | |
| 311 | + Clears current value | |
| 312 | +*} | |
| 313 | +procedure TPHPValue.Clear; | |
| 314 | +begin | |
| 315 | + FValue := ''; | |
| 316 | + if Assigned(FObj) then FObj.Free; | |
| 317 | + FObj := nil; | |
| 318 | +end; | |
| 319 | + | |
| 320 | +{* | |
| 321 | + Destructor | |
| 322 | +*} | |
| 323 | +destructor TPHPValue.Destroy; | |
| 324 | +begin | |
| 325 | + Clear; | |
| 326 | + inherited; | |
| 327 | +end; | |
| 328 | + | |
| 329 | +{ TPHPArray } | |
| 330 | + | |
| 331 | + | |
| 332 | +{* | |
| 333 | + Clears whole array | |
| 334 | +*} | |
| 335 | +procedure TPHPArray.Clear; | |
| 336 | +var | |
| 337 | + i: Integer; | |
| 338 | +begin | |
| 339 | + for i := 0 to GetCount - 1 do | |
| 340 | + begin | |
| 341 | + FElements[i].Key.Free; | |
| 342 | + FElements[i].Key := nil; | |
| 343 | + FElements[i].Value.Free; | |
| 344 | + FElements[i].Value := nil; | |
| 345 | + end; | |
| 346 | + SetLength(FElements, 0); | |
| 347 | +end; | |
| 348 | + | |
| 349 | +{* | |
| 350 | + Constructor | |
| 351 | +*} | |
| 352 | +constructor TPHPArray.Create; | |
| 353 | +begin | |
| 354 | + inherited; | |
| 355 | + Clear; | |
| 356 | +end; | |
| 357 | + | |
| 358 | +{* | |
| 359 | + Destructor | |
| 360 | +*} | |
| 361 | +destructor TPHPArray.Destroy; | |
| 362 | +begin | |
| 363 | + Clear; | |
| 364 | + inherited; | |
| 365 | +end; | |
| 366 | + | |
| 367 | +{* | |
| 368 | + Returns the number of items in the array | |
| 369 | + | |
| 370 | + @return number of items | |
| 371 | +*} | |
| 372 | +function TPHPArray.GetCount: Integer; | |
| 373 | +begin | |
| 374 | + Result := Length(FElements); | |
| 375 | +end; | |
| 376 | + | |
| 377 | +{* | |
| 378 | + Checks if the array is empty | |
| 379 | + | |
| 380 | + @return true | |
| 381 | +*} | |
| 382 | +function TPHPArray.Getempty: Boolean; | |
| 383 | +begin | |
| 384 | + Result := Length(FElements) = 0; | |
| 385 | +end; | |
| 386 | + | |
| 387 | +{* | |
| 388 | + Fetch a phpvalue from the array | |
| 389 | + | |
| 390 | + @param Key Handle to phpvalue | |
| 391 | + @return handle to phpvalue | |
| 392 | +*} | |
| 393 | +function TPHPArray.GetValue(Key: TPHPValue): TPHPValue; | |
| 394 | +begin | |
| 395 | + Result := GetValue(Key.FValue); | |
| 396 | +end; | |
| 397 | + | |
| 398 | +{* | |
| 399 | + Fetch a phpvalue from the array | |
| 400 | + | |
| 401 | + @param Key Index to element | |
| 402 | + @return handle to phpvalue | |
| 403 | +*} | |
| 404 | +function TPHPArray.GetValue(Key: string): TPHPValue; | |
| 405 | +var | |
| 406 | + i: Integer; | |
| 407 | + r: Boolean; | |
| 408 | +begin | |
| 409 | + Result := nil; | |
| 410 | + i := 0; | |
| 411 | + r := False; | |
| 412 | + while (i < Length(FElements)) and (not r) do | |
| 413 | + begin | |
| 414 | + if AnsiUpperCase(FElements[i].key.AsString) = AnsiUpperCase(Key) then | |
| 415 | + begin | |
| 416 | + Result := FElements[i].Value; | |
| 417 | + r := True; | |
| 418 | + end; | |
| 419 | + i := i + 1; | |
| 420 | + end; | |
| 421 | +end; | |
| 422 | + | |
| 423 | +{* | |
| 424 | + Insert a phpvalue into the array | |
| 425 | + | |
| 426 | + @param Key Index to element | |
| 427 | + @return handle to phpvalue | |
| 428 | +*} | |
| 429 | +procedure TPHPArray.SetValue(Key, VValue: TPHPValue); | |
| 430 | +var | |
| 431 | + i, j: Integer; | |
| 432 | + r: Boolean; | |
| 433 | + E: TPHPHashedElementArray; | |
| 434 | +begin | |
| 435 | + if VValue <> nil then | |
| 436 | + begin | |
| 437 | + i := 0; | |
| 438 | + r := False; | |
| 439 | + while (i < Length(FElements)) and not r do | |
| 440 | + begin | |
| 441 | + if AnsiUpperCase(FElements[i].key.AsString) = AnsiUpperCase(Key.AsString) then | |
| 442 | + begin | |
| 443 | + FElements[i].Value := VValue; | |
| 444 | + r := True; | |
| 445 | + end; | |
| 446 | + i := i + 1; | |
| 447 | + end; | |
| 448 | + if not r then | |
| 449 | + begin | |
| 450 | + SetLength(FElements, Length(FElements) + 1); | |
| 451 | + FElements[Length(FElements) - 1].Key := Key; | |
| 452 | + FElements[Length(FElements) - 1].Value := Vvalue; | |
| 453 | + end; | |
| 454 | + end; | |
| 455 | + | |
| 456 | + SetLength(E, Length(FElements)); | |
| 457 | + for i := 0 to Length(FElements) - 1 do E[i] := FElements[i]; | |
| 458 | + SetLength(FElements, 0); | |
| 459 | + for i := 0 to Length(E) - 1 do if (E[i].Key.AsString <> '') | |
| 460 | + and (E[i].Value <> nil) then | |
| 461 | + begin | |
| 462 | + j := Length(FElements); | |
| 463 | + setlength(FElements, j + 1); | |
| 464 | + FElements[j] := E[i]; | |
| 465 | + end; | |
| 466 | +end; | |
| 467 | + | |
| 468 | +end. | |
| 469 | + | ... | ... |
ktwsapi/delphi/uktwsapi.pas
0 → 100644
| 1 | +{ | |
| 2 | + Copyright (c) 2007, The Jam Warehouse Software (Pty) Ltd. | |
| 3 | + | |
| 4 | + All rights reserved. | |
| 5 | + | |
| 6 | + Redistribution and use in source and binary forms, with or without | |
| 7 | + modification, are permitted provided that the following conditions are met: | |
| 8 | + | |
| 9 | + i) Redistributions of source code must retain the above copyright notice, | |
| 10 | + this list of conditions and the following disclaimer. | |
| 11 | + ii) Redistributions in binary form must reproduce the above copyright | |
| 12 | + notice, this list of conditions and the following disclaimer in the | |
| 13 | + documentation and/or other materials provided with the distribution. | |
| 14 | + iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the | |
| 15 | + names of its contributors may be used to endorse or promote products | |
| 16 | + derived from this software without specific prior written permission. | |
| 17 | + | |
| 18 | + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
| 19 | + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
| 20 | + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
| 21 | + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |
| 22 | + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | |
| 23 | + EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, | |
| 24 | + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
| 25 | + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
| 26 | + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING | |
| 27 | + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
| 28 | + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 29 | +} | |
| 30 | + | |
| 31 | +{* | |
| 32 | + This is a Delphi port of the php api for KnowledgeTree WebService. | |
| 33 | + | |
| 34 | + @Author Bjarte Kalstveit Vebjørnsen <bjarte@macaos.com> | |
| 35 | + @Version 1.0 BKV 24.09.2007 Initial revision | |
| 36 | +*} | |
| 37 | + | |
| 38 | +unit uktwsapi; | |
| 39 | + | |
| 40 | +interface | |
| 41 | + | |
| 42 | +uses | |
| 43 | + Classes, SysUtils, SOAPHTTPClient, uwebservice; | |
| 44 | + | |
| 45 | +type | |
| 46 | + | |
| 47 | + /// Base exception class | |
| 48 | + EKTWSAPI_Exception = class(Exception); | |
| 49 | + | |
| 50 | + TKTWSAPI_FolderItem = class; | |
| 51 | + TKTWSAPI_Folder = class; | |
| 52 | + TKTWSAPI_Document = class; | |
| 53 | + TKTWSAPI = class; | |
| 54 | + | |
| 55 | + /// Base class for documents and folders | |
| 56 | + TKTWSAPI_FolderItem = class(TObject) | |
| 57 | + private | |
| 58 | + FKTAPI: TKTWSAPI; /// Handle to KTAPI object | |
| 59 | + FParentId: Integer; /// Id of parent folder | |
| 60 | + | |
| 61 | + function _GetFileSize(FileName: WideString): WideString; | |
| 62 | + function _UploadFile(FileName, Action: WideString; DocumentId: Integer = 0): WideString; | |
| 63 | + function _DownloadFile(Url, LocalPath, FileName: WideString): Boolean; | |
| 64 | + function _SaveBase64StringAsFile(Base64String, LocalPath, FileName: WideString): Boolean; | |
| 65 | + function _LoadFileAsBase64String(FileName: WideString): WideString; | |
| 66 | + | |
| 67 | + public | |
| 68 | + function GetParentFolder:TKTWSAPI_Folder; | |
| 69 | + end; | |
| 70 | + | |
| 71 | + /// Class representing a folder | |
| 72 | + TKTWSAPI_Folder = class(TKTWSAPI_FolderItem) | |
| 73 | + private | |
| 74 | + FFolderName, /// Name of folder | |
| 75 | + FFullPath: WideString; /// Full path to folder | |
| 76 | + | |
| 77 | + FFolderId: Integer; /// Id to folder | |
| 78 | + public | |
| 79 | + constructor Create(KTAPI:TKTWSAPI; FolderDetail: kt_folder_detail); overload; | |
| 80 | + class function Get(KTAPI: TKTWSAPI; FolderId:Integer): TKTWSAPI_Folder; | |
| 81 | + function GetParentFolderId: Integer; | |
| 82 | + function GetFolderName: WideString; | |
| 83 | + function GetFolderId: Integer; | |
| 84 | + function GetFolderByName(FolderName: WideString): TKTWSAPI_Folder; | |
| 85 | + function GetFullPath: WideString; | |
| 86 | + function GetListing(Depth: Integer=1; What: WideString = 'DF'): kt_folder_contents; | |
| 87 | + function GetDocumentByName(Title: WideString): TKTWSAPI_Document; | |
| 88 | + function GetDocumentByFileName(FileName: WideString): TKTWSAPI_Document; | |
| 89 | + function AddFolder(FolderName: WideString): TKTWSAPI_Folder; | |
| 90 | + function Delete(Reason: WideString): Boolean; | |
| 91 | + function Rename(NewName: WideString): Boolean; | |
| 92 | + function Move(TargetFolder:TKTWSAPI_Folder; Reason: WideString): Boolean; | |
| 93 | + function Copy(TargetFolder:TKTWSAPI_Folder; Reason: WideString): Boolean; | |
| 94 | + function AddDocument(FileName: WideString; Title: WideString = ''; | |
| 95 | + DocumentType: WideString = ''): TKTWSAPI_Document; | |
| 96 | + function AddDocumentBase64(FileName: WideString; Title: WideString = ''; | |
| 97 | + DocumentType: WideString = ''): TKTWSAPI_Document; | |
| 98 | + published | |
| 99 | + property FolderName: WideString read FFolderName write FFolderName; | |
| 100 | + property FullPath: WideString read FFullPath write FFullPath; | |
| 101 | + property FolderId: Integer read FFolderId write FFolderId; | |
| 102 | + end; | |
| 103 | + | |
| 104 | + /// Class representing a document | |
| 105 | + TKTWSAPI_Document = class(TKTWSAPI_FolderItem) | |
| 106 | + private | |
| 107 | + | |
| 108 | + FDocumentId: Integer; /// Id of document | |
| 109 | + FTitle, /// Title of document | |
| 110 | + FDocumentType, /// Type of document | |
| 111 | + FVersion, /// Document version | |
| 112 | + FFileName, /// Original filename | |
| 113 | + FCreatedDate, /// Date created | |
| 114 | + FCreatedBy, /// Name of user who created | |
| 115 | + FUpdatedDate, /// Date updated | |
| 116 | + FUpdatedBy, /// Name of user who updated | |
| 117 | + FWorkflow, /// Workflow | |
| 118 | + FWorkflowState, /// Workflow state | |
| 119 | + FCheckoutBy, /// Name of user who checked out | |
| 120 | + FFullPath: WideString; /// Full path to document | |
| 121 | + public | |
| 122 | + constructor Create(KTAPI: TKTWSAPI; DocumentDetail: kt_document_detail); | |
| 123 | + | |
| 124 | + class function Get(KTAPI: TKTWSAPI; DocumentId: Integer; | |
| 125 | + LoadInfo: Boolean = System.True): TKTWSAPI_Document; | |
| 126 | + function Checkin(FileName, Reason: WideString; MajorUpdate: Boolean): Boolean; | |
| 127 | + function Checkout(Reason: WideString; LocalPath: WideString = ''; | |
| 128 | + DownloadFile: Boolean = True): Boolean; | |
| 129 | + function UndoCheckout(Reason: WideString): Boolean; | |
| 130 | + function Download(Version: WideString = ''; LocalPath: WideString = ''; FileName: WideString = ''): Boolean; | |
| 131 | + function Delete(Reason: WideString): Boolean; | |
| 132 | + function ChangeOwner(UserName, Reason: WideString): Boolean; | |
| 133 | + function Copy(Folder: TKTWSAPI_Folder; Reason: WideString; | |
| 134 | + NewTitle: WideString = ''; NewFileName: WideString = ''): Boolean; | |
| 135 | + function Move(Folder: TKTWSAPI_Folder; Reason: WideString; | |
| 136 | + NewTitle: WideString = ''; NewFileName: WideString = ''): Boolean; | |
| 137 | + function ChangeDocumentType(DocumentType: WideString): Boolean; | |
| 138 | + function RenameTitle(NewTitle: WideString): Boolean; | |
| 139 | + function RenameFilename(NewFilename: WideString): Boolean; | |
| 140 | + function StartWorkflow(WorkFlow: WideString): Boolean; | |
| 141 | + function DeleteWorkflow: Boolean; | |
| 142 | + function PeformWorkflowTransition(Transition, Reason: WideString): Boolean; | |
| 143 | + function GetMetadata:kt_metadata_response; | |
| 144 | + function UpdateMetadata(Metadata: kt_metadata_fieldsets): Boolean; | |
| 145 | + function GetTransactionHistory: kt_document_transaction_history_response; | |
| 146 | + function GetVersionHistory: kt_document_version_history_response; | |
| 147 | + function GetLinks: kt_linked_document_response; | |
| 148 | + function Link(DocumentId: Integer; const LinkType: WideString): Boolean; | |
| 149 | + function Unlink(DocumentId: Integer): Boolean; | |
| 150 | + function CheckinBase64(FileName, Reason: WideString; MajorUpdate: Boolean): Boolean; | |
| 151 | + function CheckoutBase64(Reason: WideString; LocalPath: WideString = ''; | |
| 152 | + DownloadFile: Boolean = True): Boolean; | |
| 153 | + function DownloadBase64(Version: WideString = ''; LocalPath: WideString = ''): Boolean; | |
| 154 | + function GetTypes: kt_document_types_response; | |
| 155 | + function GetLinkTypes: kt_document_types_response; | |
| 156 | + | |
| 157 | + property DocumentId: Integer read FDocumentId write FDocumentId; | |
| 158 | + property Title: WideString read FTitle write FTitle; | |
| 159 | + property DocumentType: WideString read FDocumentType write FDocumentType; | |
| 160 | + property Version: WideString read FVersion write FVersion; | |
| 161 | + property FileName: WideString read FFileName write FFileName; | |
| 162 | + property CreatedDate: WideString read FCreatedBy write FCreatedBy; | |
| 163 | + property CreatedBy: WideString read FCreatedBy write FCreatedBy; | |
| 164 | + property UpdatedDate: WideString read FUpdatedDate write FUpdatedDate; | |
| 165 | + property UpdatedBy: WideString read FUpdatedBy write FUpdatedBy; | |
| 166 | + property Workflow: WideString read FWorkflow write FWorkflow; | |
| 167 | + property WorkflowState: WideString read FWorkflowState write FWorkflowState; | |
| 168 | + property CheckoutBy: WideString read FCheckoutBy write FCheckoutBy; | |
| 169 | + property FullPath: WideString read FFullPath write FFullPath; | |
| 170 | + end; | |
| 171 | + | |
| 172 | + /// Api entry point | |
| 173 | + TKTWSAPI = class | |
| 174 | + private | |
| 175 | + | |
| 176 | + FSession, /// Current session id | |
| 177 | + FDownloadPath: WideString; /// Current download path | |
| 178 | + | |
| 179 | + FSoapClient:KnowledgeTreePort; /// Object implementing the | |
| 180 | + /// KnowledgeTreePort interface | |
| 181 | + public | |
| 182 | + constructor Create(); | |
| 183 | + function GetDownloadPath: WideString; | |
| 184 | + function SetDownloadPath(DownloadPath:WideString): Boolean; | |
| 185 | + function StartAnonymousSession(Ip: WideString = ''): WideString; | |
| 186 | + function StartSession(Username, Password: WideString; Ip: WideString = ''): WideString; | |
| 187 | + function ActiveSession(Session: WideString; Ip: WideString = ''): WideString; | |
| 188 | + function Logout: Boolean; | |
| 189 | + function GetRootFolder: TKTWSAPI_Folder; | |
| 190 | + function GetFolderById(FolderId: Integer): TKTWSAPI_Folder; | |
| 191 | + function GetDocumentById(DocumentId: Integer): TKTWSAPI_Document; | |
| 192 | + published | |
| 193 | + property SoapClient: KnowledgeTreePort read FSoapClient write FSoapClient; | |
| 194 | + property Session: WideString read FSession write FSession; | |
| 195 | + end; | |
| 196 | +var | |
| 197 | + KTWebServerUrl: WideString; /// Your webserver url | |
| 198 | + KTUploadUrl: WideString; /// URL to the web-service upload.php | |
| 199 | + KTWebServiceUrl: WideString; /// URL to the web-service wsdl | |
| 200 | + | |
| 201 | +implementation | |
| 202 | + | |
| 203 | +uses | |
| 204 | + IdComponent, IdURI, IdHttp, IdMultipartFormData, IdGlobalProtocols, | |
| 205 | + uPHPSerialize, EncdDecd; | |
| 206 | +const | |
| 207 | + KTWSAPI_ERR_SESSION_IN_USE = | |
| 208 | + 'There is a session already active.'; /// Exception message when session is in use | |
| 209 | + KTWSAPI_ERR_SESSION_NOT_STARTED = | |
| 210 | + 'An active session has not been started.'; /// Exception message when session is not started | |
| 211 | + | |
| 212 | + | |
| 213 | +{ TKTWSAPI_FolderItem } | |
| 214 | + | |
| 215 | +{* | |
| 216 | + Finds the filesize of a file. | |
| 217 | + | |
| 218 | + @param FileName Path to the file | |
| 219 | + @return The size of the file as a string | |
| 220 | +*} | |
| 221 | +function TKTWSAPI_FolderItem._GetFileSize(FileName: WideString): WideString; | |
| 222 | +var | |
| 223 | + SearchRec: TSearchRec; | |
| 224 | + sgPath: string; | |
| 225 | + inRetval, I1: Integer; | |
| 226 | +begin | |
| 227 | + sgPath := ExpandFileName(FileName); | |
| 228 | + try | |
| 229 | + inRetval := FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec); | |
| 230 | + if inRetval = 0 then | |
| 231 | + I1 := SearchRec.Size | |
| 232 | + else | |
| 233 | + I1 := -1; | |
| 234 | + finally | |
| 235 | + SysUtils.FindClose(SearchRec); | |
| 236 | + end; | |
| 237 | + Result := IntToStr(I1); | |
| 238 | +end; | |
| 239 | + | |
| 240 | +{* | |
| 241 | + Reads a file into a string and base64 encodes it. | |
| 242 | + | |
| 243 | + @param Base64String Base64 encoded string | |
| 244 | + @param LocalPath Path to load from | |
| 245 | + @param FileName FileName to read | |
| 246 | + @return base64 encoded string | |
| 247 | + @throws EKTWSAPI_Exception 'Could not access file to read.' | |
| 248 | +*} | |
| 249 | +function TKTWSAPI_FolderItem._LoadFileAsBase64String(FileName: WideString): WideString; | |
| 250 | +var | |
| 251 | + Stream: TFileStream; | |
| 252 | + InString: AnsiString; | |
| 253 | +begin | |
| 254 | + if not FileExists(FileName) then | |
| 255 | + raise EKTWSAPI_Exception.Create('Could not access file to read.'); | |
| 256 | + Stream := TFileStream.Create(FileName, fmOpenRead); | |
| 257 | + try | |
| 258 | + SetLength(InString, Stream.Size); | |
| 259 | + Stream.ReadBuffer(InString[1], Length(InString)); | |
| 260 | + Result := EncodeString(InString); | |
| 261 | + finally | |
| 262 | + Stream.Free; | |
| 263 | + end; | |
| 264 | +end; | |
| 265 | + | |
| 266 | +{* | |
| 267 | + Save a Base64 encoded string as a file. | |
| 268 | + | |
| 269 | + @param Base64String Base64 encoded string | |
| 270 | + @param LocalPath Path to save to | |
| 271 | + @param FileName FileName to save as | |
| 272 | + @return true if success | |
| 273 | +*} | |
| 274 | +function TKTWSAPI_FolderItem._SaveBase64StringAsFile(Base64String, LocalPath, | |
| 275 | + FileName: WideString): Boolean; | |
| 276 | +var | |
| 277 | + OutString: AnsiString; | |
| 278 | + Stream: TFileStream; | |
| 279 | + LocalFileName: String; | |
| 280 | +begin | |
| 281 | + LocalFileName := LocalPath + '/' + FileName; | |
| 282 | + OutString := DecodeString(Base64String); | |
| 283 | + Stream := TFileStream.Create(LocalFileName, fmCreate); | |
| 284 | + try | |
| 285 | + // For some reason it fails if I use WideString instead of AnsiString | |
| 286 | + Stream.WriteBuffer(Pointer(OutString)^, Length(OutString)); | |
| 287 | + Result := true; | |
| 288 | + finally | |
| 289 | + Stream.Free; | |
| 290 | + end; | |
| 291 | +end; | |
| 292 | + | |
| 293 | +{* | |
| 294 | + Upload a file to KT. | |
| 295 | + | |
| 296 | + @param FileName Path to upload file | |
| 297 | + @param Action Which action to perform with the file (A = Add, C = Checkin) | |
| 298 | + @param DocumentId Id of the document | |
| 299 | + @return The temporary filename on the server | |
| 300 | + @throws EKTWSAPI_Exception Could not access file to upload. | |
| 301 | + @throws EKTWSAPI_Exception No response from server. | |
| 302 | + @throws EKTWSAPI_Exception Could not upload file. | |
| 303 | +*} | |
| 304 | +function TKTWSAPI_FolderItem._UploadFile(FileName, Action: WideString; | |
| 305 | + DocumentId: Integer): WideString; | |
| 306 | +var | |
| 307 | + UploadName, UploadStatus, SessionId, StatusCode: WideString; | |
| 308 | + PostStream: TIdMultiPartFormDataStream; | |
| 309 | + ResponseStream: TStringStream; | |
| 310 | + Fields: TStringList; | |
| 311 | + HTTP: TIdHTTP; | |
| 312 | + UploadData: TPHPValue; | |
| 313 | + FilesArr: TPHPArray; | |
| 314 | +begin | |
| 315 | + Result := ''; | |
| 316 | + if not FileExists(FileName) then | |
| 317 | + raise EKTWSAPI_Exception.Create('Could not access file to upload.'); | |
| 318 | + // TODO: Check if file is readable | |
| 319 | + | |
| 320 | + if (DocumentId = 0) then | |
| 321 | + UploadName := 'upload_document' | |
| 322 | + else | |
| 323 | + UploadName := 'upload_'+IntToStr(DocumentId); | |
| 324 | + SessionId := FKTAPI.Session; | |
| 325 | + | |
| 326 | + HTTP := TIdHttp.Create(nil); | |
| 327 | + try | |
| 328 | + PostStream := TIdMultiPartFormDataStream.Create; | |
| 329 | + ResponseStream := TStringStream.Create(''); | |
| 330 | + Fields := TStringList.Create; | |
| 331 | + try | |
| 332 | + PostStream.AddFormField('session_id', SessionId); | |
| 333 | + PostStream.AddFormField('action', Action); | |
| 334 | + PostStream.AddFormField('document_id',IntToStr(DocumentId)); | |
| 335 | + PostStream.AddFormField(UploadName,'@' + FileName); | |
| 336 | + PostStream.AddFile('file',FileName,GetMIMETypeFromFile(FileName)); | |
| 337 | + | |
| 338 | + HTTP.Request.ContentType := PostStream.RequestContentType; | |
| 339 | + HTTP.Post(KTUploadURL, PostStream, ResponseStream); | |
| 340 | + if (ResponseStream.DataString = '') then | |
| 341 | + raise EKTWSAPI_Exception.Create('No response from server.'); | |
| 342 | + ExtractStrings(['&'], [' '], pAnsiChar(ResponseStream.DataString), Fields); | |
| 343 | + | |
| 344 | + StatusCode := Copy(Fields[0], Pos('=',Fields[0])+1, 1); | |
| 345 | + if (StatusCode <> '0') then | |
| 346 | + raise EKTWSAPI_Exception.Create('Could not upload file.'); | |
| 347 | + | |
| 348 | + | |
| 349 | + UploadStatus := Copy(Fields[1], Pos('=',Fields[1])+1, Length(Fields[1])); | |
| 350 | + UploadStatus := TIdURI.URLDecode(UploadStatus); | |
| 351 | + UploadData := TPHPSerialize.Unserialize(TIdURI.URLDecode(UploadStatus)); | |
| 352 | + Assert(Assigned(UploadData)); | |
| 353 | + Assert(Assigned(UploadData.AsArray['file'])); | |
| 354 | + try | |
| 355 | + FilesArr := UploadData.AsArray['file'].AsArray; | |
| 356 | + | |
| 357 | + if (FilesArr['size'].AsString <> _GetFileSize(FileName)) then | |
| 358 | + raise EKTWSAPI_Exception.Create('Could not upload file.'); | |
| 359 | + | |
| 360 | + Result := FilesArr['tmp_name'].AsString; | |
| 361 | + finally | |
| 362 | + UploadData.Free; | |
| 363 | + end; | |
| 364 | + finally | |
| 365 | + PostStream.Free; | |
| 366 | + ResponseStream.Free; | |
| 367 | + Fields.Free; | |
| 368 | + end; | |
| 369 | + finally | |
| 370 | + HTTP.Free; | |
| 371 | + end; | |
| 372 | +end; | |
| 373 | + | |
| 374 | +{* | |
| 375 | + Downloads a file from KT. | |
| 376 | + | |
| 377 | + @param Url Http-url to download | |
| 378 | + @param LocalPath Path to save to | |
| 379 | + @param FileName FileName to save as | |
| 380 | + @return true if success | |
| 381 | + @throws EKTWSAPI_Exception Could not create local file | |
| 382 | +*} | |
| 383 | +function TKTWSAPI_FolderItem._DownloadFile(Url, LocalPath, | |
| 384 | + FileName: WideString): Boolean; | |
| 385 | +var | |
| 386 | + Stream: TMemoryStream; | |
| 387 | + LocalFileName: WideString; | |
| 388 | + FP: File; | |
| 389 | + HTTP: TIdHTTP; | |
| 390 | +begin | |
| 391 | + LocalFileName := LocalPath + '/' + FileName; | |
| 392 | + | |
| 393 | + AssignFile(FP, LocalFileName); | |
| 394 | + {$I-} | |
| 395 | + Rewrite(FP,1); | |
| 396 | + {$I+} | |
| 397 | + if (IOResult <> 0) then | |
| 398 | + raise EKTWSAPI_Exception.Create('Could not create local file'); | |
| 399 | + CloseFile(FP); | |
| 400 | + HTTP := TIdHttp.Create(Nil); | |
| 401 | + try | |
| 402 | + Stream := TMemoryStream.Create; | |
| 403 | + try | |
| 404 | + HTTP.Get(Url, Stream); | |
| 405 | + Stream.SaveToFile(LocalFileName); | |
| 406 | + Result := true; | |
| 407 | + finally | |
| 408 | + Stream.Free; | |
| 409 | + end; | |
| 410 | + finally | |
| 411 | + HTTP.Free; | |
| 412 | + end; | |
| 413 | +end; | |
| 414 | + | |
| 415 | +{* | |
| 416 | + Returns a reference to the parent folder. | |
| 417 | + | |
| 418 | + @return Handle to parent folder | |
| 419 | +*} | |
| 420 | +function TKTWSAPI_FolderItem.GetParentFolder: TKTWSAPI_Folder; | |
| 421 | +begin | |
| 422 | + Result := FKTAPI.GetFolderById(FParentId); | |
| 423 | +end; | |
| 424 | + | |
| 425 | + | |
| 426 | + { TKTWSAPI_Folder } | |
| 427 | + | |
| 428 | +{* | |
| 429 | + Constructor | |
| 430 | + | |
| 431 | + @param KTAPI Handle to KTAPI object | |
| 432 | + @param FolderDetail Handle to kt_folder_detail | |
| 433 | +*} | |
| 434 | +constructor TKTWSAPI_Folder.Create(KTAPI: TKTWSAPI; | |
| 435 | + FolderDetail: kt_folder_detail); | |
| 436 | +begin | |
| 437 | + FKTAPI := KTAPI; | |
| 438 | + FFolderId := FolderDetail.id; | |
| 439 | + FFolderName := FolderDetail.folder_name; | |
| 440 | + FParentId := FolderDetail.parent_id; | |
| 441 | + FFullPath := FolderDetail.full_path; | |
| 442 | +end; | |
| 443 | + | |
| 444 | +{* | |
| 445 | + Returns a reference to a TKTWSAPI_Folder | |
| 446 | + | |
| 447 | + @param KTAPI Handle to KTAPI object | |
| 448 | + @param FolderId Id of folder to fetch | |
| 449 | + @return folder handle | |
| 450 | + @throws EKTWSAPI_Exception Response message | |
| 451 | +*} | |
| 452 | +class function TKTWSAPI_Folder.Get(KTAPI: TKTWSAPI; | |
| 453 | + FolderId: Integer): TKTWSAPI_Folder; | |
| 454 | +var | |
| 455 | + FolderDetail: kt_folder_detail; | |
| 456 | +begin | |
| 457 | + Assert(Assigned(KTAPI)); | |
| 458 | + Assert(KTAPI.ClassNameIs('TKTWSAPI')); | |
| 459 | + Result := nil; | |
| 460 | + | |
| 461 | + FolderDetail := KTAPI.SoapClient.get_folder_detail(KTAPI.Session, FolderId); | |
| 462 | + try | |
| 463 | + if (FolderDetail.status_code <> 0) then | |
| 464 | + raise EKTWSAPI_Exception.Create(FolderDetail.message_); | |
| 465 | + | |
| 466 | + Result := TKTWSAPI_Folder.Create(KTAPI, FolderDetail); | |
| 467 | + | |
| 468 | + finally | |
| 469 | + FolderDetail.Free; | |
| 470 | + end; | |
| 471 | +end; | |
| 472 | + | |
| 473 | +{* | |
| 474 | + Returns the parent folder id. | |
| 475 | + | |
| 476 | + @return parent folder id | |
| 477 | +*} | |
| 478 | +function TKTWSAPI_Folder.GetParentFolderId: Integer; | |
| 479 | +begin | |
| 480 | + Result := FParentId; | |
| 481 | +end; | |
| 482 | + | |
| 483 | +{* | |
| 484 | + Returns the folder name. | |
| 485 | + | |
| 486 | + @return folder name | |
| 487 | +*} | |
| 488 | +function TKTWSAPI_Folder.GetFolderName: WideString; | |
| 489 | +begin | |
| 490 | + Result := FFolderName; | |
| 491 | +end; | |
| 492 | + | |
| 493 | +{* | |
| 494 | + Returns the current folder id. | |
| 495 | + | |
| 496 | + @return current folder id | |
| 497 | +*} | |
| 498 | +function TKTWSAPI_Folder.GetFolderId: Integer; | |
| 499 | +begin | |
| 500 | + Result := FFolderId; | |
| 501 | +end; | |
| 502 | + | |
| 503 | +{* | |
| 504 | + Returns the folder based on foldername. | |
| 505 | + | |
| 506 | + @param FolderName Name of folder | |
| 507 | + @return folder handle | |
| 508 | + @throws EKTWSAPI_Exception Response message | |
| 509 | +*} | |
| 510 | +function TKTWSAPI_Folder.GetFolderByName(FolderName: WideString): TKTWSAPI_Folder; | |
| 511 | +var | |
| 512 | + Path: WideString; | |
| 513 | + FolderDetail: kt_folder_detail; | |
| 514 | +begin | |
| 515 | + Path := FFullPath + '/' + FolderName; | |
| 516 | + if (System.Copy(Path, 0, 13) = '/Root Folder/') then | |
| 517 | + Path := System.Copy(Path, 13, Length(Path)-1); | |
| 518 | + if (System.Copy(Path, 0, 12) = 'Root Folder/') then | |
| 519 | + Path := System.Copy(Path, 12, Length(Path)-1); | |
| 520 | + | |
| 521 | + FolderDetail := FKTAPI.SoapClient.get_folder_detail_by_name(FKTAPI.Session, | |
| 522 | + Path); | |
| 523 | + | |
| 524 | + if (FolderDetail.status_code <> 0) then | |
| 525 | + raise EKTWSAPI_Exception.Create(FolderDetail.message_); | |
| 526 | + | |
| 527 | + Result := TKTWSAPI_Folder.Create(FKTAPI, FolderDetail); | |
| 528 | +end; | |
| 529 | + | |
| 530 | +{* | |
| 531 | + Returns the full folder path. | |
| 532 | + | |
| 533 | + @return Full folder path | |
| 534 | +*} | |
| 535 | +function TKTWSAPI_Folder.GetFullPath: WideString; | |
| 536 | +begin | |
| 537 | + Result := FFullPath; | |
| 538 | +end; | |
| 539 | + | |
| 540 | +{* | |
| 541 | + Returns the contents of a folder. | |
| 542 | + | |
| 543 | + @param Depth How many sub-folders to fetch | |
| 544 | + @param What to fetch (F=Folders, D=Documents, FD=Both) | |
| 545 | + @return folder contents handle | |
| 546 | + @throws EKTWSAPI_Exception Response message | |
| 547 | +*} | |
| 548 | +function TKTWSAPI_Folder.GetListing(Depth: Integer; | |
| 549 | + What: WideString): kt_folder_contents; | |
| 550 | +begin | |
| 551 | + Result := FKTAPI.SoapClient.get_folder_contents( | |
| 552 | + FKTAPI.Session, FFolderId, Depth, What); | |
| 553 | + | |
| 554 | + if (Result.status_code <> 0) then | |
| 555 | + raise EKTWSAPI_Exception.Create(Result.message_); | |
| 556 | +end; | |
| 557 | + | |
| 558 | +{* | |
| 559 | + Returns a document based on title. | |
| 560 | + | |
| 561 | + @param Title Title of document | |
| 562 | + @return document handle | |
| 563 | + @throws EKTWSAPI_Exception Response message | |
| 564 | +*} | |
| 565 | +function TKTWSAPI_Folder.GetDocumentByName(Title: WideString): TKTWSAPI_Document; | |
| 566 | +var | |
| 567 | + Path: WideString; | |
| 568 | + DocumentDetail: kt_document_detail; | |
| 569 | +begin | |
| 570 | + Path := FFullPath + '/' + Title; | |
| 571 | + if (System.Copy(Path, 0, 13) = '/Root Folder/') then | |
| 572 | + Path := System.Copy(Path, 13, Length(Path)-1); | |
| 573 | + if (System.Copy(Path, 0, 12) = 'Root Folder/') then | |
| 574 | + Path := System.Copy(Path, 12, Length(Path)-1); | |
| 575 | + | |
| 576 | + DocumentDetail := FKTAPI.SoapClient.get_document_detail_by_name(FKTAPI.Session, | |
| 577 | + Path, 'T'); | |
| 578 | + | |
| 579 | + if (DocumentDetail.status_code <> 0) then | |
| 580 | + raise EKTWSAPI_Exception.Create(DocumentDetail.message_); | |
| 581 | + | |
| 582 | + Result := TKTWSAPI_Document.Create(FKTAPI, DocumentDetail); | |
| 583 | +end; | |
| 584 | + | |
| 585 | +{* | |
| 586 | + Returns a document based on filename. | |
| 587 | + | |
| 588 | + @param FileName Name of file | |
| 589 | + @return document handle | |
| 590 | + @throws EKTWSAPI_Exception Response message | |
| 591 | +*} | |
| 592 | +function TKTWSAPI_Folder.GetDocumentByFileName( | |
| 593 | + FileName: WideString): TKTWSAPI_Document; | |
| 594 | +var | |
| 595 | + Path: WideString; | |
| 596 | + DocumentDetail: kt_document_detail; | |
| 597 | +begin | |
| 598 | + Result := nil; | |
| 599 | + Path := FFullPath + '/' + FileName; | |
| 600 | + if (System.Copy(Path, 0, 13) = '/Root Folder/') then | |
| 601 | + Path := System.Copy(Path, 13, Length(Path)-1); | |
| 602 | + if (System.Copy(Path, 0, 12) = 'Root Folder/') then | |
| 603 | + Path := System.Copy(Path, 12, Length(Path)-1); | |
| 604 | + | |
| 605 | + DocumentDetail := FKTAPI.SoapClient.get_document_detail_by_name(FKTAPI.Session, | |
| 606 | + Path, 'F'); | |
| 607 | + try | |
| 608 | + if (DocumentDetail.status_code <> 0) then | |
| 609 | + raise EKTWSAPI_Exception.Create(DocumentDetail.message_); | |
| 610 | + Result := TKTWSAPI_Document.Create(FKTAPI, DocumentDetail); | |
| 611 | + finally | |
| 612 | + DocumentDetail.Free; | |
| 613 | + end; | |
| 614 | +end; | |
| 615 | + | |
| 616 | +{* | |
| 617 | + Adds a sub folder. | |
| 618 | + | |
| 619 | + @param FolderName Name of folder | |
| 620 | + @return new folder handle | |
| 621 | + @throws EKTWSAPI_Exception Response message | |
| 622 | +*} | |
| 623 | +function TKTWSAPI_Folder.AddFolder(FolderName: WideString): TKTWSAPI_Folder; | |
| 624 | +var | |
| 625 | + FolderDetail: kt_folder_detail; | |
| 626 | +begin | |
| 627 | + Result := nil; | |
| 628 | + FolderDetail := FKTAPI.SoapClient.create_folder(FKTAPI.Session, FFolderId, FolderName); | |
| 629 | + try | |
| 630 | + if (FolderDetail.status_code <> 0) then | |
| 631 | + raise EKTWSAPI_Exception.Create(FolderDetail.message_); | |
| 632 | + | |
| 633 | + Result := TKTWSAPI_Folder.Create(FKTAPI, FolderDetail); | |
| 634 | + finally | |
| 635 | + FolderDetail.Free; | |
| 636 | + end; | |
| 637 | +end; | |
| 638 | + | |
| 639 | +{* | |
| 640 | + Deletes the current folder. | |
| 641 | + | |
| 642 | + @param Reason Reason for deletetion | |
| 643 | + @return true | |
| 644 | + @throws EKTWSAPI_Exception Response message | |
| 645 | +*} | |
| 646 | +function TKTWSAPI_Folder.Delete(Reason: WideString): Boolean; | |
| 647 | +var | |
| 648 | + response: kt_response; | |
| 649 | +begin | |
| 650 | + // TODO: check why no transaction in folder_transactions | |
| 651 | + Result := System.False; | |
| 652 | + response := FKTAPI.SoapClient.delete_folder(FKTAPI.Session, | |
| 653 | + FFolderId, Reason); | |
| 654 | + try | |
| 655 | + if (response.status_code <> 0) then | |
| 656 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 657 | + Result := System.True; | |
| 658 | + finally | |
| 659 | + response.Free; | |
| 660 | + end; | |
| 661 | +end; | |
| 662 | + | |
| 663 | +{* | |
| 664 | + Renames the current folder. | |
| 665 | + | |
| 666 | + @param NewName New folder name | |
| 667 | + @return true | |
| 668 | + @throws EKTWSAPI_Exception Response message | |
| 669 | +*} | |
| 670 | +function TKTWSAPI_Folder.Rename(NewName: WideString): Boolean; | |
| 671 | +var | |
| 672 | + response: kt_response; | |
| 673 | +begin | |
| 674 | + Result := System.False; | |
| 675 | + response := FKTAPI.SoapClient.rename_folder(FKTAPI.Session, | |
| 676 | + FFolderId, NewName); | |
| 677 | + try | |
| 678 | + if (response.status_code <> 0) then | |
| 679 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 680 | + Result := System.True; | |
| 681 | + finally | |
| 682 | + response.Free; | |
| 683 | + end; | |
| 684 | +end; | |
| 685 | + | |
| 686 | +{* | |
| 687 | + Moves a folder to another location. | |
| 688 | + | |
| 689 | + @param TargetFolder Handle to target folder | |
| 690 | + @param Reason Reason for move | |
| 691 | + @return true | |
| 692 | + @throws EKTWSAPI_Exception Response message | |
| 693 | +*} | |
| 694 | +function TKTWSAPI_Folder.Move(TargetFolder: TKTWSAPI_Folder; | |
| 695 | + Reason: WideString): Boolean; | |
| 696 | +var | |
| 697 | + response: kt_response; | |
| 698 | +begin | |
| 699 | + Result := System.False; | |
| 700 | + Assert(Assigned(TargetFolder)); | |
| 701 | + Assert(TargetFolder.ClassNameIs('TKTWSAPI_Folder')); | |
| 702 | + | |
| 703 | + response := FKTAPI.SoapClient.move_folder(FKTAPI.Session, | |
| 704 | + FFolderId, TargetFolder.GetFolderId, Reason); | |
| 705 | + try | |
| 706 | + if (response.status_code <> 0) then | |
| 707 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 708 | + Result := System.True; | |
| 709 | + finally | |
| 710 | + response.Free; | |
| 711 | + end; | |
| 712 | +end; | |
| 713 | + | |
| 714 | +{* | |
| 715 | + Copies a folder to another location | |
| 716 | + | |
| 717 | + @param TargetFolder Handle to target folder | |
| 718 | + @param Reason Reason for copy | |
| 719 | + @return true | |
| 720 | + @throws EKTWSAPI_Exception Response message | |
| 721 | +*} | |
| 722 | +function TKTWSAPI_Folder.Copy(TargetFolder: TKTWSAPI_Folder; | |
| 723 | + Reason: WideString): Boolean; | |
| 724 | +var | |
| 725 | + TargetId: Integer; | |
| 726 | + response: kt_response; | |
| 727 | +begin | |
| 728 | + Result := System.False; | |
| 729 | + Assert(Assigned(TargetFolder)); | |
| 730 | + Assert(TargetFolder.ClassNameIs('TKTWSAPI_Folder')); | |
| 731 | + | |
| 732 | + TargetId := TargetFolder.GetFolderId; | |
| 733 | + response := FKTAPI.SoapClient.copy_folder(FKTAPI.Session, | |
| 734 | + FFolderId, TargetId, Reason); | |
| 735 | + try | |
| 736 | + if (response.status_code <> 0) then | |
| 737 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 738 | + Result := System.True; | |
| 739 | + finally | |
| 740 | + response.Free; | |
| 741 | + end; | |
| 742 | +end; | |
| 743 | + | |
| 744 | +{* | |
| 745 | + Adds a document to the current folder. | |
| 746 | + | |
| 747 | + @param FileName FileName to upload | |
| 748 | + @param Title Title to give document | |
| 749 | + @param DocumentType Documenttype of document (Default is 'Default') | |
| 750 | + @return handle to new document | |
| 751 | + @throws EKTWSAPI_Exception Response message | |
| 752 | +*} | |
| 753 | +function TKTWSAPI_Folder.AddDocument(FileName, Title, | |
| 754 | + DocumentType: WideString): TKTWSAPI_Document; | |
| 755 | +var | |
| 756 | + BaseName, TempFileName: WideString; | |
| 757 | + DocumentDetail: kt_document_detail; | |
| 758 | +begin | |
| 759 | + Result := nil; | |
| 760 | + BaseName := ExtractFileName(FileName); | |
| 761 | + if (Title = '') then | |
| 762 | + Title := BaseName; | |
| 763 | + if (DocumentType = '') then | |
| 764 | + DocumentType := 'Default'; | |
| 765 | + | |
| 766 | + TempFileName := _UploadFile(FileName, 'A'); | |
| 767 | + DocumentDetail := FKTAPI.FSoapClient.add_document(FKTAPI.Session, FFolderId, | |
| 768 | + Title, BaseName, DocumentType, TempFileName); | |
| 769 | + try | |
| 770 | + if (DocumentDetail.status_code <> 0) then | |
| 771 | + raise EKTWSAPI_Exception.Create(DocumentDetail.message_); | |
| 772 | + | |
| 773 | + Result := TKTWSAPI_Document.Create(FKTAPI, DocumentDetail); | |
| 774 | + finally | |
| 775 | + DocumentDetail.Free; | |
| 776 | + end; | |
| 777 | +end; | |
| 778 | + | |
| 779 | +{* | |
| 780 | + Adds a document to the current folder through web service. | |
| 781 | + | |
| 782 | + @param FileName FileName to upload | |
| 783 | + @param Title Title to give document | |
| 784 | + @param DocumentType Documenttype of document (Default is 'Default') | |
| 785 | + @return handle to new document | |
| 786 | + @throws EKTWSAPI_Exception Response message | |
| 787 | +*} | |
| 788 | +function TKTWSAPI_Folder.AddDocumentBase64(FileName, Title, | |
| 789 | + DocumentType: WideString): TKTWSAPI_Document; | |
| 790 | +begin | |
| 791 | + raise EKTWSAPI_Exception.Create('Not implemented yet!'); | |
| 792 | +end; | |
| 793 | + | |
| 794 | +{ TKTWSAPI_Document } | |
| 795 | + | |
| 796 | +{* | |
| 797 | + Constructor | |
| 798 | + | |
| 799 | + @param KTAPI Handle to KTAPI object | |
| 800 | + @param DocumentDetail handle to kt_document_detail | |
| 801 | +*} | |
| 802 | +constructor TKTWSAPI_Document.Create(KTAPI: TKTWSAPI; | |
| 803 | + DocumentDetail: kt_document_detail); | |
| 804 | +begin | |
| 805 | + FKTAPI := KTAPI; | |
| 806 | + FDocumentId := DocumentDetail.document_id; | |
| 807 | + FTitle := DocumentDetail.title; | |
| 808 | + FDocumentType := DocumentDetail.document_type; | |
| 809 | + FVersion := DocumentDetail.version; | |
| 810 | + FFilename := DocumentDetail.filename; | |
| 811 | + FCreatedDate := DocumentDetail.created_date; | |
| 812 | + FCreatedBy := DocumentDetail.created_by; | |
| 813 | + FUpdatedDate := DocumentDetail.updated_date; | |
| 814 | + FUpdatedBy := DocumentDetail.updated_by; | |
| 815 | + FParentId := DocumentDetail.folder_id; | |
| 816 | + FWorkflow := DocumentDetail.workflow; | |
| 817 | + FWorkflowState := DocumentDetail.workflow_state; | |
| 818 | + FCheckoutBy := DocumentDetail.checkout_by; | |
| 819 | + FFullPath := DocumentDetail.full_path; | |
| 820 | +end; | |
| 821 | + | |
| 822 | +{* | |
| 823 | + Returns a reference to a document. | |
| 824 | + | |
| 825 | + @param KTAPI Handle to KTAPI object | |
| 826 | + @param DocumentId Id of document | |
| 827 | + @param LoadInfo Call web service to load document details | |
| 828 | + @return handle to document | |
| 829 | + @throws EKTWSAPI_Exception Response message | |
| 830 | +*} | |
| 831 | +class function TKTWSAPI_Document.Get(KTAPI: TKTWSAPI; DocumentId: Integer; | |
| 832 | + LoadInfo: Boolean): TKTWSAPI_Document; | |
| 833 | +var | |
| 834 | + DocumentDetail:kt_document_detail; | |
| 835 | +begin | |
| 836 | + Assert(Assigned(KTAPI)); | |
| 837 | + Assert(KTAPI.ClassNameIs('TKTWSAPI')); | |
| 838 | + if LoadInfo then | |
| 839 | + begin | |
| 840 | + DocumentDetail := KTAPI.SoapClient.get_document_detail(KTAPI.Session, DocumentId); | |
| 841 | + | |
| 842 | + if (DocumentDetail.status_code <> 0) then | |
| 843 | + raise EKTWSAPI_Exception.Create(DocumentDetail.message_); | |
| 844 | + | |
| 845 | + end else | |
| 846 | + begin | |
| 847 | + DocumentDetail := kt_document_detail.Create; | |
| 848 | + DocumentDetail.document_id := DocumentId; | |
| 849 | + end; | |
| 850 | + try | |
| 851 | + Result := TKTWSAPI_Document.Create(KTAPI, DocumentDetail); | |
| 852 | + finally | |
| 853 | + DocumentDetail.Free; | |
| 854 | + end; | |
| 855 | +end; | |
| 856 | + | |
| 857 | +{* | |
| 858 | + Checks in a document. | |
| 859 | + | |
| 860 | + @param FileName Name of file to checkin | |
| 861 | + @param Reason Reason for checkin | |
| 862 | + @param MajorUpdate Checkin as a major update (bumps major version number) | |
| 863 | + @return true | |
| 864 | + @throws EKTWSAPI_Exception Response message | |
| 865 | +*} | |
| 866 | +function TKTWSAPI_Document.Checkin(FileName, Reason: WideString; | |
| 867 | + MajorUpdate: Boolean): Boolean; | |
| 868 | +var | |
| 869 | + BaseName, TempFileName: WideString; | |
| 870 | + response: kt_response; | |
| 871 | +begin | |
| 872 | + Result := System.False; | |
| 873 | + BaseName := ExtractFileName(FileName); | |
| 874 | + | |
| 875 | + TempFileName := _UploadFile(FileName, 'C', FDocumentId); | |
| 876 | + response := FKTAPI.SoapClient.checkin_document(FKTAPI.Session, FDocumentId, BaseName, Reason, TempFileName, MajorUpdate); | |
| 877 | + try | |
| 878 | + if (response.status_code <> 0) then | |
| 879 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 880 | + Result := System.True; | |
| 881 | + finally | |
| 882 | + response.Free; | |
| 883 | + end; | |
| 884 | +end; | |
| 885 | + | |
| 886 | +{* | |
| 887 | + Checks out a document. | |
| 888 | + | |
| 889 | + @param Reason Reason for checkout | |
| 890 | + @param LocalPath to save downloaded file to | |
| 891 | + @param DownloadFile if false then checkout will happen without download | |
| 892 | + @return true | |
| 893 | + @throws EKTWSAPI_Exception local path does not exist | |
| 894 | + @throws EKTWSAPI_Exception Response message | |
| 895 | +*} | |
| 896 | +function TKTWSAPI_Document.Checkout(Reason, LocalPath: WideString; | |
| 897 | + DownloadFile: Boolean): Boolean; | |
| 898 | +var | |
| 899 | + response: kt_response; | |
| 900 | + Url: WideString; | |
| 901 | +begin | |
| 902 | + Result := System.False; | |
| 903 | + if (LocalPath = '') then LocalPath := FKTAPI.GetDownloadPath; | |
| 904 | + | |
| 905 | + if not DirectoryExists(LocalPath) then | |
| 906 | + raise EKTWSAPI_Exception.Create('local path does not exist'); | |
| 907 | + | |
| 908 | + // TODO check if Directory is writable | |
| 909 | + | |
| 910 | + response := FKTAPI.SoapClient.checkout_document(FKTAPI.Session, FDocumentId, Reason); | |
| 911 | + try | |
| 912 | + if (response.status_code <> 0) then | |
| 913 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 914 | + | |
| 915 | + Url := response.message_; | |
| 916 | + | |
| 917 | + if DownloadFile then | |
| 918 | + _DownloadFile(KTWebServerURL+Url, LocalPath, FFileName); | |
| 919 | + | |
| 920 | + Result := System.True; | |
| 921 | + finally | |
| 922 | + response.Free; | |
| 923 | + end; | |
| 924 | +end; | |
| 925 | + | |
| 926 | +{* | |
| 927 | + Undo a document checkout | |
| 928 | + | |
| 929 | + @param Reason Reason for undoing the checkout | |
| 930 | + @return true | |
| 931 | + @throws EKTWSAPI_Exception Response message | |
| 932 | +*} | |
| 933 | +function TKTWSAPI_Document.UndoCheckout(Reason: WideString): Boolean; | |
| 934 | +var | |
| 935 | + response: kt_response; | |
| 936 | +begin | |
| 937 | + Result := System.False; | |
| 938 | + response := FKTAPI.SoapClient.undo_document_checkout(FKTAPI.Session, FDocumentId, Reason); | |
| 939 | + try | |
| 940 | + if (response.status_code <> 0) then | |
| 941 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 942 | + | |
| 943 | + Result := System.True; | |
| 944 | + finally | |
| 945 | + response.Free; | |
| 946 | + end; | |
| 947 | +end; | |
| 948 | + | |
| 949 | +{* | |
| 950 | + Download a version of the document | |
| 951 | + | |
| 952 | + @param Version Which version of document to download | |
| 953 | + @param LocalPath Optional path to save file to | |
| 954 | + @param FileName Optional filename to save file as | |
| 955 | + @return true | |
| 956 | + @throws EKTWSAPI_Exception local path does not exist | |
| 957 | + @throws EKTWSAPI_Exception Response message | |
| 958 | +*} | |
| 959 | +function TKTWSAPI_Document.Download(Version, LocalPath, FileName: WideString): Boolean; | |
| 960 | +var | |
| 961 | + response: kt_response; | |
| 962 | + Url: WideString; | |
| 963 | +begin | |
| 964 | + Result := System.False; | |
| 965 | + if (LocalPath = '') then LocalPath := FKTAPI.GetDownloadPath; | |
| 966 | + if (FileName = '') then FileName := FFileName; | |
| 967 | + | |
| 968 | + if (not DirectoryExists(LocalPath)) then | |
| 969 | + raise EKTWSAPI_Exception.Create('local path does not exist'); | |
| 970 | + | |
| 971 | + // TODO: Check if local path is writable | |
| 972 | + | |
| 973 | + response := FKTAPI.SoapClient.download_document(FKTAPI.Session, FDocumentId); | |
| 974 | + try | |
| 975 | + if (response.status_code <> 0) then | |
| 976 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 977 | + Url := response.message_; | |
| 978 | + Result := _DownloadFile(KTWebServerURL+Url, LocalPath, FileName); | |
| 979 | + finally | |
| 980 | + response.Free; | |
| 981 | + end; | |
| 982 | +end; | |
| 983 | + | |
| 984 | + | |
| 985 | +{* | |
| 986 | + Download a version of the document through webservice | |
| 987 | + | |
| 988 | + @param Version Which version of document to download | |
| 989 | + @param LocalPath Path to save file to | |
| 990 | + @return true | |
| 991 | + @throws EKTWSAPI_Exception Response message | |
| 992 | +*} | |
| 993 | +function TKTWSAPI_Document.DownloadBase64(Version, | |
| 994 | + LocalPath: WideString): Boolean; | |
| 995 | +var | |
| 996 | + response: kt_response; | |
| 997 | +begin | |
| 998 | + Result := System.False; | |
| 999 | + if (LocalPath = '') then LocalPath := FKTAPI.GetDownloadPath; | |
| 1000 | + if (FileName = '') then FileName := FFileName; | |
| 1001 | + | |
| 1002 | + if (not DirectoryExists(LocalPath)) then | |
| 1003 | + raise EKTWSAPI_Exception.Create('local path does not exist'); | |
| 1004 | + | |
| 1005 | + // TODO: Check if local path is writable | |
| 1006 | + | |
| 1007 | + response := FKTAPI.SoapClient.download_base64_document(FKTAPI.Session, FDocumentId); | |
| 1008 | + try | |
| 1009 | + if (response.status_code <> 0) then | |
| 1010 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1011 | + Result := _SaveBase64StringAsFile(response.message_, LocalPath, FileName); | |
| 1012 | + finally | |
| 1013 | + response.Free; | |
| 1014 | + end; | |
| 1015 | +end; | |
| 1016 | + | |
| 1017 | +{* | |
| 1018 | + Deletes the current document. | |
| 1019 | + | |
| 1020 | + @param Reason Reason for delete | |
| 1021 | + @return true | |
| 1022 | + @throws EKTWSAPI_Exception Response message | |
| 1023 | +*} | |
| 1024 | +function TKTWSAPI_Document.Delete(Reason: WideString): Boolean; | |
| 1025 | +var | |
| 1026 | + response: kt_response; | |
| 1027 | +begin | |
| 1028 | + Result := System.False; | |
| 1029 | + response := FKTAPI.SoapClient.delete_document(FKTAPI.Session, FDocumentId, Reason); | |
| 1030 | + try | |
| 1031 | + if (response.status_code <> 0) then | |
| 1032 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1033 | + | |
| 1034 | + Result := System.True; | |
| 1035 | + finally | |
| 1036 | + response.Free; | |
| 1037 | + end; | |
| 1038 | +end; | |
| 1039 | + | |
| 1040 | +{* | |
| 1041 | + Changes the owner of the document. | |
| 1042 | + | |
| 1043 | + @param UserName Username of new owner | |
| 1044 | + @param Reason Reason for the owner change | |
| 1045 | + @return true | |
| 1046 | + @throws EKTWSAPI_Exception Response message | |
| 1047 | +*} | |
| 1048 | +function TKTWSAPI_Document.ChangeOwner(UserName, Reason: WideString): Boolean; | |
| 1049 | +var | |
| 1050 | + response: kt_response; | |
| 1051 | +begin | |
| 1052 | + Result := System.False; | |
| 1053 | + response := FKTAPI.SoapClient.change_document_owner(FKTAPI.Session, FDocumentId, UserName, Reason); | |
| 1054 | + try | |
| 1055 | + if (response.status_code <> 0) then | |
| 1056 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1057 | + | |
| 1058 | + Result := System.True; | |
| 1059 | + finally | |
| 1060 | + response.Free; | |
| 1061 | + end; | |
| 1062 | +end; | |
| 1063 | + | |
| 1064 | +{* | |
| 1065 | + Copies the current document to the specified folder. | |
| 1066 | + | |
| 1067 | + @param Folder Handle to target folder | |
| 1068 | + @param Reason Reason for copy | |
| 1069 | + @param NewTitle New title of the file | |
| 1070 | + @param NewFileName New filename of the file | |
| 1071 | + @return true | |
| 1072 | + @throws EKTWSAPI_Exception Response message | |
| 1073 | +*} | |
| 1074 | +function TKTWSAPI_Document.Copy(Folder: TKTWSAPI_Folder; Reason, NewTitle, | |
| 1075 | + NewFileName: WideString): Boolean; | |
| 1076 | +var | |
| 1077 | + response: kt_response; | |
| 1078 | + FolderId: Integer; | |
| 1079 | +begin | |
| 1080 | + Result := System.False; | |
| 1081 | + Assert(Assigned(Folder)); | |
| 1082 | + Assert(Folder.ClassNameIs('TKTWSAPI_Folder')); | |
| 1083 | + FolderId := Folder.GetFolderId; | |
| 1084 | + | |
| 1085 | + response := FKTAPI.SoapClient.copy_document(FKTAPI.Session, FDocumentId, FolderId, Reason, NewTitle, NewFileName); | |
| 1086 | + try | |
| 1087 | + if (response.status_code <> 0) then | |
| 1088 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1089 | + | |
| 1090 | + Result := System.True; | |
| 1091 | + finally | |
| 1092 | + response.Free; | |
| 1093 | + end; | |
| 1094 | +end; | |
| 1095 | + | |
| 1096 | +{* | |
| 1097 | + Moves the current document to the specified folder. | |
| 1098 | + | |
| 1099 | + @param Folder Handle to target folder | |
| 1100 | + @param Reason Reason for move | |
| 1101 | + @param NewTitle New title of the file | |
| 1102 | + @param NewFileName New filename of the file | |
| 1103 | + @return true | |
| 1104 | + @throws EKTWSAPI_Exception Response message | |
| 1105 | +*} | |
| 1106 | +function TKTWSAPI_Document.Move(Folder: TKTWSAPI_Folder; Reason, NewTitle, | |
| 1107 | + NewFileName: WideString): Boolean; | |
| 1108 | +var | |
| 1109 | + response: kt_response; | |
| 1110 | + FolderId: Integer; | |
| 1111 | +begin | |
| 1112 | + Result := System.False; | |
| 1113 | + Assert(Assigned(Folder)); | |
| 1114 | + Assert(Folder.ClassNameIs('TKTWSAPI_Folder')); | |
| 1115 | + FolderId := Folder.GetFolderId; | |
| 1116 | + | |
| 1117 | + response := FKTAPI.SoapClient.move_document(FKTAPI.Session, FDocumentId, FolderId, Reason, NewTitle, NewFileName); | |
| 1118 | + try | |
| 1119 | + if (response.status_code <> 0) then | |
| 1120 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1121 | + Result := System.True; | |
| 1122 | + finally | |
| 1123 | + response.Free; | |
| 1124 | + end; | |
| 1125 | +end; | |
| 1126 | + | |
| 1127 | +{* | |
| 1128 | + Changes the document type. | |
| 1129 | + | |
| 1130 | + @param DocumentType DocumentType to change to | |
| 1131 | + @return true | |
| 1132 | + @throws EKTWSAPI_Exception Response message | |
| 1133 | +*} | |
| 1134 | +function TKTWSAPI_Document.ChangeDocumentType(DocumentType: WideString): Boolean; | |
| 1135 | +var | |
| 1136 | + response: kt_response; | |
| 1137 | +begin | |
| 1138 | + Result := System.False; | |
| 1139 | + response := FKTAPI.SoapClient.change_document_type(FKTAPI.Session, FDocumentId, DocumentType); | |
| 1140 | + try | |
| 1141 | + if (response.status_code <> 0) then | |
| 1142 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1143 | + | |
| 1144 | + Result := System.True; | |
| 1145 | + finally | |
| 1146 | + response.Free; | |
| 1147 | + end; | |
| 1148 | +end; | |
| 1149 | + | |
| 1150 | +{* | |
| 1151 | + Renames the title of the current document. | |
| 1152 | + | |
| 1153 | + @param NewTitle New title of the document | |
| 1154 | + @return true | |
| 1155 | + @throws EKTWSAPI_Exception Response message | |
| 1156 | +*} | |
| 1157 | +function TKTWSAPI_Document.RenameTitle(NewTitle: WideString): Boolean; | |
| 1158 | +var | |
| 1159 | + response: kt_response; | |
| 1160 | +begin | |
| 1161 | + Result := System.False; | |
| 1162 | + response := FKTAPI.SoapClient.rename_document_title(FKTAPI.Session, FDocumentId, NewTitle); | |
| 1163 | + try | |
| 1164 | + if (response.status_code <> 0) then | |
| 1165 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1166 | + | |
| 1167 | + Result := System.True; | |
| 1168 | + finally | |
| 1169 | + response.Free; | |
| 1170 | + end; | |
| 1171 | +end; | |
| 1172 | + | |
| 1173 | +{* | |
| 1174 | + Renames the filename of the current document. | |
| 1175 | + | |
| 1176 | + @param NewFilename New filename of the document | |
| 1177 | + @return true | |
| 1178 | +*} | |
| 1179 | +function TKTWSAPI_Document.RenameFilename(NewFilename: WideString): Boolean; | |
| 1180 | +var | |
| 1181 | + response: kt_response; | |
| 1182 | +begin | |
| 1183 | + Result := System.False; | |
| 1184 | + response := FKTAPI.SoapClient.rename_document_filename(FKTAPI.Session, FDocumentId, NewFilename); | |
| 1185 | + try | |
| 1186 | + if (response.status_code <> 0) then | |
| 1187 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1188 | + | |
| 1189 | + Result := System.True; | |
| 1190 | + finally | |
| 1191 | + response.Free; | |
| 1192 | + end; | |
| 1193 | +end; | |
| 1194 | + | |
| 1195 | +{* | |
| 1196 | + Starts a workflow on the current document. | |
| 1197 | + | |
| 1198 | + @param WorkFlow Workflow | |
| 1199 | + @return true | |
| 1200 | + @throws EKTWSAPI_Exception Response message | |
| 1201 | +*} | |
| 1202 | +function TKTWSAPI_Document.StartWorkflow(WorkFlow: WideString): Boolean; | |
| 1203 | +var | |
| 1204 | + response: kt_response; | |
| 1205 | +begin | |
| 1206 | + Result := System.False; | |
| 1207 | + response := FKTAPI.SoapClient.start_document_workflow(FKTAPI.Session, FDocumentId, WorkFlow); | |
| 1208 | + try | |
| 1209 | + if (response.status_code <> 0) then | |
| 1210 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1211 | + | |
| 1212 | + Result := System.True; | |
| 1213 | + finally | |
| 1214 | + response.Free; | |
| 1215 | + end; | |
| 1216 | +end; | |
| 1217 | + | |
| 1218 | +{* | |
| 1219 | + Removes the workflow process from the current document. | |
| 1220 | + | |
| 1221 | + @return true | |
| 1222 | + @throws EKTWSAPI_Exception Response message | |
| 1223 | +*} | |
| 1224 | +function TKTWSAPI_Document.DeleteWorkflow: Boolean; | |
| 1225 | +var | |
| 1226 | + response: kt_response; | |
| 1227 | +begin | |
| 1228 | + Result := System.False; | |
| 1229 | + response := FKTAPI.SoapClient.delete_document_workflow(FKTAPI.Session, FDocumentId); | |
| 1230 | + try | |
| 1231 | + if (response.status_code <> 0) then | |
| 1232 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1233 | + | |
| 1234 | + Result := System.True; | |
| 1235 | + finally | |
| 1236 | + response.Free; | |
| 1237 | + end; | |
| 1238 | +end; | |
| 1239 | + | |
| 1240 | +{* | |
| 1241 | + Performs a transition on the current document. | |
| 1242 | + | |
| 1243 | + @param Transition Transition | |
| 1244 | + @param Reason Reason for transition | |
| 1245 | + @return true | |
| 1246 | + @throws EKTWSAPI_Exception Response message | |
| 1247 | +*} | |
| 1248 | +function TKTWSAPI_Document.PeformWorkflowTransition(Transition, | |
| 1249 | + Reason: WideString): Boolean; | |
| 1250 | +var | |
| 1251 | + response: kt_response; | |
| 1252 | +begin | |
| 1253 | + Result := System.False; | |
| 1254 | + response := FKTAPI.SoapClient.perform_document_workflow_transition(FKTAPI.Session, FDocumentId, Transition, Reason); | |
| 1255 | + try | |
| 1256 | + if (response.status_code <> 0) then | |
| 1257 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1258 | + | |
| 1259 | + Result := System.True; | |
| 1260 | + finally | |
| 1261 | + response.Free; | |
| 1262 | + end; | |
| 1263 | +end; | |
| 1264 | + | |
| 1265 | +{* | |
| 1266 | + Returns metadata on the document. | |
| 1267 | + | |
| 1268 | + @return handle to metadata | |
| 1269 | + @throws EKTWSAPI_Exception Response message | |
| 1270 | +*} | |
| 1271 | +function TKTWSAPI_Document.GetMetadata: kt_metadata_response; | |
| 1272 | +begin | |
| 1273 | + Result := FKTAPI.SoapClient.get_document_metadata(FKTAPI.Session, FDocumentId); | |
| 1274 | + | |
| 1275 | + if (Result.status_code <> 0) then | |
| 1276 | + raise EKTWSAPI_Exception.Create(Result.message_); | |
| 1277 | +end; | |
| 1278 | + | |
| 1279 | +{* | |
| 1280 | + Updates the metadata on the current document. | |
| 1281 | + | |
| 1282 | + @param Metadata Handle to metadata | |
| 1283 | + @return true | |
| 1284 | + @throws EKTWSAPI_Exception Response message | |
| 1285 | +*} | |
| 1286 | +function TKTWSAPI_Document.UpdateMetadata( | |
| 1287 | + Metadata: kt_metadata_fieldsets): Boolean; | |
| 1288 | +var | |
| 1289 | + response: kt_response; | |
| 1290 | +begin | |
| 1291 | + Result := System.False; | |
| 1292 | + response := FKTAPI.SoapClient.update_document_metadata(FKTAPI.Session, FDocumentId, MetaData); | |
| 1293 | + try | |
| 1294 | + if (response.status_code <> 0) then | |
| 1295 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1296 | + | |
| 1297 | + Result := System.True; | |
| 1298 | + finally | |
| 1299 | + response.Free; | |
| 1300 | + end; | |
| 1301 | +end; | |
| 1302 | + | |
| 1303 | +{* | |
| 1304 | + Returns the transaction history on the current document. | |
| 1305 | + | |
| 1306 | + @return handle to transaction history | |
| 1307 | + @throws EKTWSAPI_Exception Response message | |
| 1308 | +*} | |
| 1309 | +function TKTWSAPI_Document.GetTransactionHistory: kt_document_transaction_history_response; | |
| 1310 | +begin | |
| 1311 | + Result := FKTAPI.SoapClient.get_document_transaction_history(FKTAPI.Session, FDocumentId); | |
| 1312 | + if (Result.status_code <> 0) then | |
| 1313 | + raise EKTWSAPI_Exception.Create(Result.message_); | |
| 1314 | +end; | |
| 1315 | + | |
| 1316 | +{* | |
| 1317 | + Returns the version history on the current document. | |
| 1318 | + | |
| 1319 | + @return handle to document version history | |
| 1320 | + @throws EKTWSAPI_Exception Response message | |
| 1321 | +*} | |
| 1322 | +function TKTWSAPI_Document.GetVersionHistory: kt_document_version_history_response; | |
| 1323 | +begin | |
| 1324 | + Result := FKTAPI.SoapClient.get_document_version_history(FKTAPI.Session, FDocumentId); | |
| 1325 | + if (Result.status_code <> 0) then | |
| 1326 | + raise EKTWSAPI_Exception.Create(Result.message_); | |
| 1327 | +end; | |
| 1328 | + | |
| 1329 | +{* | |
| 1330 | + Returns the links of the current document | |
| 1331 | + | |
| 1332 | + @return handle to document version history | |
| 1333 | + @throws EKTWSAPI_Exception Response message | |
| 1334 | +*} | |
| 1335 | +function TKTWSAPI_Document.GetLinks: kt_linked_document_response; | |
| 1336 | +begin | |
| 1337 | + Result := FKTAPI.SoapClient.get_document_links(FKTAPI.Session, FDocumentId); | |
| 1338 | + if (Result.status_code <> 0) then | |
| 1339 | + raise EKTWSAPI_Exception.Create(Result.message_); | |
| 1340 | +end; | |
| 1341 | + | |
| 1342 | +{* | |
| 1343 | + Links the current document to a DocumentId | |
| 1344 | + | |
| 1345 | + @param DocumentId DocumentId to link to | |
| 1346 | + @param LinkType Type of link | |
| 1347 | + @return true | |
| 1348 | + @throws EKTWSAPI_Exception Response message | |
| 1349 | +*} | |
| 1350 | +function TKTWSAPI_Document.Link(DocumentId: Integer; | |
| 1351 | + const LinkType: WideString): Boolean; | |
| 1352 | +var | |
| 1353 | + response: kt_response; | |
| 1354 | +begin | |
| 1355 | + Result := System.False; | |
| 1356 | + response := FKTAPI.SoapClient.link_documents(FKTAPI.Session, FDocumentId, | |
| 1357 | + DocumentId, LinkType); | |
| 1358 | + try | |
| 1359 | + if (response.status_code <> 0) then | |
| 1360 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1361 | + Result := System.True; | |
| 1362 | + finally | |
| 1363 | + response.Free; | |
| 1364 | + end; | |
| 1365 | +end; | |
| 1366 | + | |
| 1367 | +{* | |
| 1368 | + Unlinks the current document from a DocumentId | |
| 1369 | + | |
| 1370 | + @param DocumentId DocumentId to unlink to | |
| 1371 | + @return true | |
| 1372 | + @throws EKTWSAPI_Exception Response message | |
| 1373 | +*} | |
| 1374 | +function TKTWSAPI_Document.Unlink(DocumentId: Integer): Boolean; | |
| 1375 | +var | |
| 1376 | + response: kt_response; | |
| 1377 | +begin | |
| 1378 | + Result := System.False; | |
| 1379 | + response := FKTAPI.SoapClient.unlink_documents(FKTAPI.Session, FDocumentId, | |
| 1380 | + DocumentId); | |
| 1381 | + try | |
| 1382 | + if (response.status_code <> 0) then | |
| 1383 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1384 | + Result := System.True; | |
| 1385 | + finally | |
| 1386 | + response.Free; | |
| 1387 | + end; | |
| 1388 | +end; | |
| 1389 | + | |
| 1390 | +{* | |
| 1391 | + Checks out a document and downloads document through webservice | |
| 1392 | + | |
| 1393 | + @param Reason Reason for checkout | |
| 1394 | + @param LocalPath to save downloaded file to | |
| 1395 | + @return true | |
| 1396 | + @throws EKTWSAPI_Exception local path does not exist | |
| 1397 | + @throws EKTWSAPI_Exception Response message | |
| 1398 | +*} | |
| 1399 | +function TKTWSAPI_Document.CheckoutBase64(Reason, | |
| 1400 | + LocalPath: WideString; DownloadFile: Boolean): Boolean; | |
| 1401 | +var | |
| 1402 | + response: kt_response; | |
| 1403 | +begin | |
| 1404 | + Result := System.False; | |
| 1405 | + if (LocalPath = '') then LocalPath := FKTAPI.GetDownloadPath; | |
| 1406 | + | |
| 1407 | + if not DirectoryExists(LocalPath) then | |
| 1408 | + raise EKTWSAPI_Exception.Create('local path does not exist'); | |
| 1409 | + | |
| 1410 | + // TODO check if Directory is writable | |
| 1411 | + | |
| 1412 | + response := FKTAPI.SoapClient.checkout_base64_document(FKTAPI.Session, FDocumentId, Reason, DownloadFile); | |
| 1413 | + try | |
| 1414 | + if (response.status_code <> 0) then | |
| 1415 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1416 | + Result := True; | |
| 1417 | + if DownloadFile then | |
| 1418 | + Result := _SaveBase64StringAsFile(response.message_, LocalPath, FFileName); | |
| 1419 | + finally | |
| 1420 | + response.Free; | |
| 1421 | + end; | |
| 1422 | +end; | |
| 1423 | + | |
| 1424 | +{* | |
| 1425 | + Gets list of document types | |
| 1426 | + | |
| 1427 | + @return handle to document types response | |
| 1428 | + @throws EKTWSAPI_Exception Response message | |
| 1429 | +*} | |
| 1430 | +function TKTWSAPI_Document.GetTypes: kt_document_types_response; | |
| 1431 | +begin | |
| 1432 | + Result := FKTAPI.SoapClient.get_document_types(FKTAPI.Session); | |
| 1433 | + if (Result.status_code <> 0) then | |
| 1434 | + raise EKTWSAPI_Exception.Create(Result.message_); | |
| 1435 | +end; | |
| 1436 | + | |
| 1437 | +{* | |
| 1438 | + Get list of document link types | |
| 1439 | + @return handle to document types response | |
| 1440 | + @throws EKTWSAPI_Exception Response message | |
| 1441 | +*} | |
| 1442 | +function TKTWSAPI_Document.GetLinkTypes: kt_document_types_response; | |
| 1443 | +begin | |
| 1444 | + Result := FKTAPI.SoapClient.get_document_link_types(FKTAPI.Session); | |
| 1445 | + if (Result.status_code <> 0) then | |
| 1446 | + raise EKTWSAPI_Exception.Create(Result.message_); | |
| 1447 | +end; | |
| 1448 | + | |
| 1449 | +{* | |
| 1450 | + Checks in a document and uploads through webservice | |
| 1451 | + | |
| 1452 | + @param FileName Name of file to checkin | |
| 1453 | + @param Reason Reason for checkin | |
| 1454 | + @param MajorUpdate Checkin as a major update (bumps major version number) | |
| 1455 | + @return true | |
| 1456 | + @throws EKTWSAPI_Exception Response message | |
| 1457 | +*} | |
| 1458 | +function TKTWSAPI_Document.CheckinBase64(FileName, Reason: WideString; | |
| 1459 | + MajorUpdate: Boolean): Boolean; | |
| 1460 | +var | |
| 1461 | + Base64String, BaseName: WideString; | |
| 1462 | + response: kt_response; | |
| 1463 | +begin | |
| 1464 | + Result := System.False; | |
| 1465 | + Base64String := _LoadFileAsBase64String(FileName); | |
| 1466 | + BaseName := ExtractFileName(FileName); | |
| 1467 | + | |
| 1468 | + response := FKTAPI.SoapClient.checkin_base64_document(FKTAPI.Session, | |
| 1469 | + FDocumentId, BaseName, Reason, Base64String, MajorUpdate); | |
| 1470 | + try | |
| 1471 | + if (response.status_code <> 0) then | |
| 1472 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1473 | + Result := System.True; | |
| 1474 | + finally | |
| 1475 | + response.Free; | |
| 1476 | + end; | |
| 1477 | +end; | |
| 1478 | + | |
| 1479 | +{ TKTWSAPI } | |
| 1480 | + | |
| 1481 | +{* | |
| 1482 | + Constructor | |
| 1483 | +*} | |
| 1484 | +constructor Tktwsapi.Create(); | |
| 1485 | +begin | |
| 1486 | + FSoapClient := GetKnowledgeTreePort(False, KTWebServiceUrl); | |
| 1487 | + FDownloadPath := ''; | |
| 1488 | +end; | |
| 1489 | + | |
| 1490 | +{* | |
| 1491 | + This returns the default location where documents are downloaded in download() and checkout(). | |
| 1492 | + | |
| 1493 | + @return string | |
| 1494 | +*} | |
| 1495 | +function TKTWSAPI.GetDownloadPath: WideString; | |
| 1496 | +begin | |
| 1497 | + Result := FDownloadPath; | |
| 1498 | +end; | |
| 1499 | + | |
| 1500 | +{* | |
| 1501 | + Allows the default location for downloaded documents to be changed. | |
| 1502 | + | |
| 1503 | + @param DownloadPath Path to writable folder | |
| 1504 | + @return true | |
| 1505 | +*} | |
| 1506 | +function TKTWSAPI.SetDownloadPath(DownloadPath: WideString): Boolean; | |
| 1507 | +begin | |
| 1508 | + if (not DirectoryExists(DownloadPath)) then | |
| 1509 | + raise EKTWSAPI_Exception.Create('local path is not writable'); | |
| 1510 | + // TODO : Check if folder is writable | |
| 1511 | + | |
| 1512 | + FDownloadPath := DownloadPath; | |
| 1513 | + Result := System.True; | |
| 1514 | +end; | |
| 1515 | + | |
| 1516 | +{* | |
| 1517 | + Starts an anonymous session. | |
| 1518 | + | |
| 1519 | + @param Ip Users Ip-adress | |
| 1520 | + @return Active session id | |
| 1521 | +*} | |
| 1522 | +function TKTWSAPI.StartAnonymousSession(Ip: WideString): WideString; | |
| 1523 | +begin | |
| 1524 | + Result := StartSession('anonymous', '', Ip); | |
| 1525 | +end; | |
| 1526 | + | |
| 1527 | +{* | |
| 1528 | + Starts a user session. | |
| 1529 | + | |
| 1530 | + @param Username Users username | |
| 1531 | + @param Password Users password | |
| 1532 | + @param Ip Users Ip-adress | |
| 1533 | + @return Active session id | |
| 1534 | + @throws EKTWSAPI_Exception KTWSAPI_ERR_SESSION_IN_USE | |
| 1535 | + @throws EKTWSAPI_Exception Response message | |
| 1536 | +*} | |
| 1537 | +function TKTWSAPI.StartSession(Username, Password, Ip: WideString): WideString; | |
| 1538 | +var | |
| 1539 | + response: kt_response; | |
| 1540 | +begin | |
| 1541 | + if (FSession <> '') then | |
| 1542 | + raise EKTWSAPI_Exception.Create(KTWSAPI_ERR_SESSION_IN_USE); | |
| 1543 | + response := FSoapClient.login(Username, Password, Ip); | |
| 1544 | + try | |
| 1545 | + if (response.status_code <> 0) then | |
| 1546 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1547 | + FSession := response.message_; | |
| 1548 | + Result := FSession; | |
| 1549 | + finally | |
| 1550 | + response.Free; | |
| 1551 | + end; | |
| 1552 | +end; | |
| 1553 | + | |
| 1554 | +{* | |
| 1555 | + Sets an active session. | |
| 1556 | + | |
| 1557 | + @param Session Session id to activate | |
| 1558 | + @param Ip Users Ip-adress | |
| 1559 | + @return Active session id | |
| 1560 | + @throws EKTWSAPI_Exception KTWSAPI_ERR_SESSION_IN_USE | |
| 1561 | +*} | |
| 1562 | +function TKTWSAPI.ActiveSession(Session, Ip: WideString): WideString; | |
| 1563 | +begin | |
| 1564 | + if (FSession <> '') then | |
| 1565 | + raise EKTWSAPI_Exception.Create(KTWSAPI_ERR_SESSION_IN_USE); | |
| 1566 | + FSession := Session; | |
| 1567 | + Result := FSession; | |
| 1568 | +end; | |
| 1569 | + | |
| 1570 | +{* | |
| 1571 | + Closes an active session. | |
| 1572 | + | |
| 1573 | + @return true | |
| 1574 | +*} | |
| 1575 | +function TKTWSAPI.Logout: Boolean; | |
| 1576 | +var | |
| 1577 | + response: kt_response; | |
| 1578 | +begin | |
| 1579 | + Result := System.False; | |
| 1580 | + | |
| 1581 | + if (FSession = '') then | |
| 1582 | + raise EKTWSAPI_Exception.Create(KTWSAPI_ERR_SESSION_NOT_STARTED); | |
| 1583 | + response := FSoapClient.logout(FSession); | |
| 1584 | + try | |
| 1585 | + if (response.status_code <> 0) then | |
| 1586 | + raise EKTWSAPI_Exception.Create(response.message_); | |
| 1587 | + FSession := ''; | |
| 1588 | + Result := System.True; | |
| 1589 | + finally | |
| 1590 | + response.Free; | |
| 1591 | + end; | |
| 1592 | +end; | |
| 1593 | + | |
| 1594 | +{* | |
| 1595 | + Returns a reference to the root folder. | |
| 1596 | + | |
| 1597 | + @return handle to folder | |
| 1598 | +*} | |
| 1599 | +function TKTWSAPI.GetRootFolder: TKTWSAPI_Folder; | |
| 1600 | +begin | |
| 1601 | + Result := GetFolderById(1); | |
| 1602 | +end; | |
| 1603 | + | |
| 1604 | +{* | |
| 1605 | + Returns a reference to a folder based on id. | |
| 1606 | + | |
| 1607 | + @param FolderId Id of folder | |
| 1608 | + @return handle to folder | |
| 1609 | +*} | |
| 1610 | +function TKTWSAPI.GetFolderById(FolderId: Integer): TKTWSAPI_Folder; | |
| 1611 | +begin | |
| 1612 | + if FSession = '' then | |
| 1613 | + raise EKTWSAPI_Exception.Create('A session is not active'); | |
| 1614 | + Result := TKTWSAPI_Folder.Get(Self, FolderId); | |
| 1615 | +end; | |
| 1616 | + | |
| 1617 | +{* | |
| 1618 | + Returns a reference to a document based on id. | |
| 1619 | + | |
| 1620 | + @param DocumentId Id of document | |
| 1621 | + @return handle to document | |
| 1622 | +*} | |
| 1623 | +function TKTWSAPI.GetDocumentById(DocumentId: Integer): TKTWSAPI_Document; | |
| 1624 | +begin | |
| 1625 | + if FSession = '' then | |
| 1626 | + raise EKTWSAPI_Exception.Create('A session is not active'); | |
| 1627 | + Result := TKTWSAPI_Document.Get(Self, DocumentId) | |
| 1628 | +end; | |
| 1629 | + | |
| 1630 | +end. | ... | ... |
ktwsapi/delphi/uwebservice.pas
0 → 100644
| 1 | +{ | |
| 2 | + Copyright (c) 2007, The Jam Warehouse Software (Pty) Ltd. | |
| 3 | + | |
| 4 | + All rights reserved. | |
| 5 | + | |
| 6 | + Redistribution and use in source and binary forms, with or without | |
| 7 | + modification, are permitted provided that the following conditions are met: | |
| 8 | + | |
| 9 | + i) Redistributions of source code must retain the above copyright notice, | |
| 10 | + this list of conditions and the following disclaimer. | |
| 11 | + ii) Redistributions in binary form must reproduce the above copyright | |
| 12 | + notice, this list of conditions and the following disclaimer in the | |
| 13 | + documentation and/or other materials provided with the distribution. | |
| 14 | + iii) Neither the name of the The Jam Warehouse Software (Pty) Ltd nor the | |
| 15 | + names of its contributors may be used to endorse or promote products | |
| 16 | + derived from this software without specific prior written permission. | |
| 17 | + | |
| 18 | + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
| 19 | + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
| 20 | + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
| 21 | + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |
| 22 | + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | |
| 23 | + EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, | |
| 24 | + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
| 25 | + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
| 26 | + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ( INCLUDING | |
| 27 | + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
| 28 | + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 29 | +} | |
| 30 | + | |
| 31 | +{* | |
| 32 | + Unit auto-generated by delphi's wsdl imported | |
| 33 | + | |
| 34 | + @Author Bjarte Kalstveit Vebjørnsen <bjarte@macaos.com> | |
| 35 | + @Version 1.0 BKV 24.09.2007 Initial revision | |
| 36 | +*} | |
| 37 | + | |
| 38 | +// ************************************************************************ // | |
| 39 | +// The types declared in this file were generated from data read from the | |
| 40 | +// WSDL File described below: | |
| 41 | +// WSDL : http://ktdms.trunk/ktwebservice/webservice.php?wsdl | |
| 42 | +// Codegen : [wfDebug,wfGenerateWarnings,wfUseSerializerClassForAttrs] | |
| 43 | +// Version : 1.0 | |
| 44 | +// (23.09.2007 21:20:12 - 1.33.2.6) | |
| 45 | +// ************************************************************************ // | |
| 46 | + | |
| 47 | +unit uwebservice; | |
| 48 | + | |
| 49 | +interface | |
| 50 | + | |
| 51 | +uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns; | |
| 52 | + | |
| 53 | +type | |
| 54 | + | |
| 55 | + // ************************************************************************ // | |
| 56 | + // The following types, referred to in the WSDL document are not being represented | |
| 57 | + // in this file. They are either aliases[@] of other types represented or were referred | |
| 58 | + // to but never[!] declared in the document. The types from the latter category | |
| 59 | + // typically map to predefined/known XML or Borland types; however, they could also | |
| 60 | + // indicate incorrect WSDL documents that failed to declare or import a schema type. | |
| 61 | + // ************************************************************************ // | |
| 62 | + // !:int - "http://www.w3.org/2001/XMLSchema" | |
| 63 | + // !:string - "http://www.w3.org/2001/XMLSchema" | |
| 64 | + // !:boolean - "http://www.w3.org/2001/XMLSchema" | |
| 65 | + | |
| 66 | + kt_response = class; { "urn:KnowledgeTree" } | |
| 67 | + kt_folder_detail = class; { "urn:KnowledgeTree" } | |
| 68 | + kt_folder_item = class; { "urn:KnowledgeTree" } | |
| 69 | + kt_folder_contents = class; { "urn:KnowledgeTree" } | |
| 70 | + kt_document_detail = class; { "urn:KnowledgeTree" } | |
| 71 | + kt_metadata_selection_item = class; { "urn:KnowledgeTree" } | |
| 72 | + kt_metadata_field = class; { "urn:KnowledgeTree" } | |
| 73 | + kt_metadata_fieldset = class; { "urn:KnowledgeTree" } | |
| 74 | + kt_metadata_response = class; { "urn:KnowledgeTree" } | |
| 75 | + kt_document_transitions_response = class; { "urn:KnowledgeTree" } | |
| 76 | + kt_document_transaction_history_item = class; { "urn:KnowledgeTree" } | |
| 77 | + kt_linked_document = class; { "urn:KnowledgeTree" } | |
| 78 | + kt_linked_document_response = class; { "urn:KnowledgeTree" } | |
| 79 | + kt_document_transaction_history_response = class; { "urn:KnowledgeTree" } | |
| 80 | + kt_document_version_history_item = class; { "urn:KnowledgeTree" } | |
| 81 | + kt_document_version_history_response = class; { "urn:KnowledgeTree" } | |
| 82 | + kt_document_types_response = class; { "urn:KnowledgeTree" } | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + // ************************************************************************ // | |
| 87 | + // Namespace : urn:KnowledgeTree | |
| 88 | + // ************************************************************************ // | |
| 89 | + kt_response = class(TRemotable) | |
| 90 | + private | |
| 91 | + Fstatus_code: Integer; | |
| 92 | + Fmessage_: WideString; | |
| 93 | + published | |
| 94 | + property status_code: Integer read Fstatus_code write Fstatus_code; | |
| 95 | + property message_: WideString read Fmessage_ write Fmessage_; | |
| 96 | + end; | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + // ************************************************************************ // | |
| 101 | + // Namespace : urn:KnowledgeTree | |
| 102 | + // ************************************************************************ // | |
| 103 | + kt_folder_detail = class(TRemotable) | |
| 104 | + private | |
| 105 | + Fstatus_code: Integer; | |
| 106 | + Fmessage_: WideString; | |
| 107 | + Fid: Integer; | |
| 108 | + Ffolder_name: WideString; | |
| 109 | + Fparent_id: Integer; | |
| 110 | + Ffull_path: WideString; | |
| 111 | + published | |
| 112 | + property status_code: Integer read Fstatus_code write Fstatus_code; | |
| 113 | + property message_: WideString read Fmessage_ write Fmessage_; | |
| 114 | + property id: Integer read Fid write Fid; | |
| 115 | + property folder_name: WideString read Ffolder_name write Ffolder_name; | |
| 116 | + property parent_id: Integer read Fparent_id write Fparent_id; | |
| 117 | + property full_path: WideString read Ffull_path write Ffull_path; | |
| 118 | + end; | |
| 119 | + | |
| 120 | + kt_folder_items = array of kt_folder_item; { "urn:KnowledgeTree" } | |
| 121 | + | |
| 122 | + | |
| 123 | + // ************************************************************************ // | |
| 124 | + // Namespace : urn:KnowledgeTree | |
| 125 | + // ************************************************************************ // | |
| 126 | + kt_folder_item = class(TRemotable) | |
| 127 | + private | |
| 128 | + Fid: Integer; | |
| 129 | + Fitem_type: WideString; | |
| 130 | + Ftitle: WideString; | |
| 131 | + Fcreator: WideString; | |
| 132 | + Fchecked_out_by: WideString; | |
| 133 | + Fmodified_by: WideString; | |
| 134 | + Ffilename: WideString; | |
| 135 | + Fsize: WideString; | |
| 136 | + Fmajor_version: WideString; | |
| 137 | + Fminor_version: WideString; | |
| 138 | + Fstorage_path: WideString; | |
| 139 | + Fmime_type: WideString; | |
| 140 | + Fmime_icon_path: WideString; | |
| 141 | + Fmime_display: WideString; | |
| 142 | + Fworkflow: WideString; | |
| 143 | + Fworkflow_state: WideString; | |
| 144 | + Fitems: kt_folder_items; | |
| 145 | + public | |
| 146 | + destructor Destroy; override; | |
| 147 | + published | |
| 148 | + property id: Integer read Fid write Fid; | |
| 149 | + property item_type: WideString read Fitem_type write Fitem_type; | |
| 150 | + property title: WideString read Ftitle write Ftitle; | |
| 151 | + property creator: WideString read Fcreator write Fcreator; | |
| 152 | + property checked_out_by: WideString read Fchecked_out_by write Fchecked_out_by; | |
| 153 | + property modified_by: WideString read Fmodified_by write Fmodified_by; | |
| 154 | + property filename: WideString read Ffilename write Ffilename; | |
| 155 | + property size: WideString read Fsize write Fsize; | |
| 156 | + property major_version: WideString read Fmajor_version write Fmajor_version; | |
| 157 | + property minor_version: WideString read Fminor_version write Fminor_version; | |
| 158 | + property storage_path: WideString read Fstorage_path write Fstorage_path; | |
| 159 | + property mime_type: WideString read Fmime_type write Fmime_type; | |
| 160 | + property mime_icon_path: WideString read Fmime_icon_path write Fmime_icon_path; | |
| 161 | + property mime_display: WideString read Fmime_display write Fmime_display; | |
| 162 | + property workflow: WideString read Fworkflow write Fworkflow; | |
| 163 | + property workflow_state: WideString read Fworkflow_state write Fworkflow_state; | |
| 164 | + property items: kt_folder_items read Fitems write Fitems; | |
| 165 | + end; | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + // ************************************************************************ // | |
| 170 | + // Namespace : urn:KnowledgeTree | |
| 171 | + // ************************************************************************ // | |
| 172 | + kt_folder_contents = class(TRemotable) | |
| 173 | + private | |
| 174 | + Fstatus_code: Integer; | |
| 175 | + Fmessage_: WideString; | |
| 176 | + Ffolder_id: Integer; | |
| 177 | + Ffolder_name: WideString; | |
| 178 | + Ffull_path: WideString; | |
| 179 | + Fitems: kt_folder_items; | |
| 180 | + public | |
| 181 | + destructor Destroy; override; | |
| 182 | + published | |
| 183 | + property status_code: Integer read Fstatus_code write Fstatus_code; | |
| 184 | + property message_: WideString read Fmessage_ write Fmessage_; | |
| 185 | + property folder_id: Integer read Ffolder_id write Ffolder_id; | |
| 186 | + property folder_name: WideString read Ffolder_name write Ffolder_name; | |
| 187 | + property full_path: WideString read Ffull_path write Ffull_path; | |
| 188 | + property items: kt_folder_items read Fitems write Fitems; | |
| 189 | + end; | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + // ************************************************************************ // | |
| 194 | + // Namespace : urn:KnowledgeTree | |
| 195 | + // ************************************************************************ // | |
| 196 | + kt_document_detail = class(TRemotable) | |
| 197 | + private | |
| 198 | + Fstatus_code: Integer; | |
| 199 | + Fmessage_: WideString; | |
| 200 | + Ftitle: WideString; | |
| 201 | + Fdocument_type: WideString; | |
| 202 | + Fversion: WideString; | |
| 203 | + Ffilename: WideString; | |
| 204 | + Fcreated_date: WideString; | |
| 205 | + Fcreated_by: WideString; | |
| 206 | + Fupdated_date: WideString; | |
| 207 | + Fupdated_by: WideString; | |
| 208 | + Fdocument_id: Integer; | |
| 209 | + Ffolder_id: Integer; | |
| 210 | + Fworkflow: WideString; | |
| 211 | + Fworkflow_state: WideString; | |
| 212 | + Fcheckout_by: WideString; | |
| 213 | + Ffull_path: WideString; | |
| 214 | + published | |
| 215 | + property status_code: Integer read Fstatus_code write Fstatus_code; | |
| 216 | + property message_: WideString read Fmessage_ write Fmessage_; | |
| 217 | + property title: WideString read Ftitle write Ftitle; | |
| 218 | + property document_type: WideString read Fdocument_type write Fdocument_type; | |
| 219 | + property version: WideString read Fversion write Fversion; | |
| 220 | + property filename: WideString read Ffilename write Ffilename; | |
| 221 | + property created_date: WideString read Fcreated_date write Fcreated_date; | |
| 222 | + property created_by: WideString read Fcreated_by write Fcreated_by; | |
| 223 | + property updated_date: WideString read Fupdated_date write Fupdated_date; | |
| 224 | + property updated_by: WideString read Fupdated_by write Fupdated_by; | |
| 225 | + property document_id: Integer read Fdocument_id write Fdocument_id; | |
| 226 | + property folder_id: Integer read Ffolder_id write Ffolder_id; | |
| 227 | + property workflow: WideString read Fworkflow write Fworkflow; | |
| 228 | + property workflow_state: WideString read Fworkflow_state write Fworkflow_state; | |
| 229 | + property checkout_by: WideString read Fcheckout_by write Fcheckout_by; | |
| 230 | + property full_path: WideString read Ffull_path write Ffull_path; | |
| 231 | + end; | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + // ************************************************************************ // | |
| 236 | + // Namespace : urn:KnowledgeTree | |
| 237 | + // ************************************************************************ // | |
| 238 | + kt_metadata_selection_item = class(TRemotable) | |
| 239 | + private | |
| 240 | + Fid: Integer; | |
| 241 | + Fname_: WideString; | |
| 242 | + Fvalue: WideString; | |
| 243 | + Fparent_id: Integer; | |
| 244 | + published | |
| 245 | + property id: Integer read Fid write Fid; | |
| 246 | + property name_: WideString read Fname_ write Fname_; | |
| 247 | + property value: WideString read Fvalue write Fvalue; | |
| 248 | + property parent_id: Integer read Fparent_id write Fparent_id; | |
| 249 | + end; | |
| 250 | + | |
| 251 | + kt_metadata_selection = array of kt_metadata_selection_item; { "urn:KnowledgeTree" } | |
| 252 | + | |
| 253 | + | |
| 254 | + // ************************************************************************ // | |
| 255 | + // Namespace : urn:KnowledgeTree | |
| 256 | + // ************************************************************************ // | |
| 257 | + kt_metadata_field = class(TRemotable) | |
| 258 | + private | |
| 259 | + Fname_: WideString; | |
| 260 | + Frequired: Boolean; | |
| 261 | + Fvalue: WideString; | |
| 262 | + Fdescription: WideString; | |
| 263 | + Fcontrol_type: WideString; | |
| 264 | + Fselection: kt_metadata_selection; | |
| 265 | + public | |
| 266 | + destructor Destroy; override; | |
| 267 | + published | |
| 268 | + property name_: WideString read Fname_ write Fname_; | |
| 269 | + property required: Boolean read Frequired write Frequired; | |
| 270 | + property value: WideString read Fvalue write Fvalue; | |
| 271 | + property description: WideString read Fdescription write Fdescription; | |
| 272 | + property control_type: WideString read Fcontrol_type write Fcontrol_type; | |
| 273 | + property selection: kt_metadata_selection read Fselection write Fselection; | |
| 274 | + end; | |
| 275 | + | |
| 276 | + kt_metadata_fields = array of kt_metadata_field; { "urn:KnowledgeTree" } | |
| 277 | + | |
| 278 | + | |
| 279 | + // ************************************************************************ // | |
| 280 | + // Namespace : urn:KnowledgeTree | |
| 281 | + // ************************************************************************ // | |
| 282 | + kt_metadata_fieldset = class(TRemotable) | |
| 283 | + private | |
| 284 | + Ffieldset: WideString; | |
| 285 | + Fdescription: WideString; | |
| 286 | + Ffields: kt_metadata_fields; | |
| 287 | + public | |
| 288 | + destructor Destroy; override; | |
| 289 | + published | |
| 290 | + property fieldset: WideString read Ffieldset write Ffieldset; | |
| 291 | + property description: WideString read Fdescription write Fdescription; | |
| 292 | + property fields: kt_metadata_fields read Ffields write Ffields; | |
| 293 | + end; | |
| 294 | + | |
| 295 | + kt_metadata_fieldsets = array of kt_metadata_fieldset; { "urn:KnowledgeTree" } | |
| 296 | + | |
| 297 | + | |
| 298 | + // ************************************************************************ // | |
| 299 | + // Namespace : urn:KnowledgeTree | |
| 300 | + // ************************************************************************ // | |
| 301 | + kt_metadata_response = class(TRemotable) | |
| 302 | + private | |
| 303 | + Fstatus_code: Integer; | |
| 304 | + Fmessage_: WideString; | |
| 305 | + Fmetadata: kt_metadata_fieldsets; | |
| 306 | + public | |
| 307 | + destructor Destroy; override; | |
| 308 | + published | |
| 309 | + property status_code: Integer read Fstatus_code write Fstatus_code; | |
| 310 | + property message_: WideString read Fmessage_ write Fmessage_; | |
| 311 | + property metadata: kt_metadata_fieldsets read Fmetadata write Fmetadata; | |
| 312 | + end; | |
| 313 | + | |
| 314 | + kt_document_transitions = array of WideString; { "urn:KnowledgeTree" } | |
| 315 | + | |
| 316 | + | |
| 317 | + // ************************************************************************ // | |
| 318 | + // Namespace : urn:KnowledgeTree | |
| 319 | + // ************************************************************************ // | |
| 320 | + kt_document_transitions_response = class(TRemotable) | |
| 321 | + private | |
| 322 | + Fstatus_code: Integer; | |
| 323 | + Fmessage_: WideString; | |
| 324 | + Fmetadata: kt_document_transitions; | |
| 325 | + published | |
| 326 | + property status_code: Integer read Fstatus_code write Fstatus_code; | |
| 327 | + property message_: WideString read Fmessage_ write Fmessage_; | |
| 328 | + property metadata: kt_document_transitions read Fmetadata write Fmetadata; | |
| 329 | + end; | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + // ************************************************************************ // | |
| 334 | + // Namespace : urn:KnowledgeTree | |
| 335 | + // ************************************************************************ // | |
| 336 | + kt_document_transaction_history_item = class(TRemotable) | |
| 337 | + private | |
| 338 | + Ftransaction_name: WideString; | |
| 339 | + Fusername: WideString; | |
| 340 | + Fversion: WideString; | |
| 341 | + Fcomment: WideString; | |
| 342 | + Fdatetime: WideString; | |
| 343 | + published | |
| 344 | + property transaction_name: WideString read Ftransaction_name write Ftransaction_name; | |
| 345 | + property username: WideString read Fusername write Fusername; | |
| 346 | + property version: WideString read Fversion write Fversion; | |
| 347 | + property comment: WideString read Fcomment write Fcomment; | |
| 348 | + property datetime: WideString read Fdatetime write Fdatetime; | |
| 349 | + end; | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + // ************************************************************************ // | |
| 354 | + // Namespace : urn:KnowledgeTree | |
| 355 | + // ************************************************************************ // | |
| 356 | + kt_linked_document = class(TRemotable) | |
| 357 | + private | |
| 358 | + Fdocument_id: Integer; | |
| 359 | + Ftitle: WideString; | |
| 360 | + Fsize: Integer; | |
| 361 | + Fworkflow: WideString; | |
| 362 | + Fworkflow_state: WideString; | |
| 363 | + Flink_type: WideString; | |
| 364 | + published | |
| 365 | + property document_id: Integer read Fdocument_id write Fdocument_id; | |
| 366 | + property title: WideString read Ftitle write Ftitle; | |
| 367 | + property size: Integer read Fsize write Fsize; | |
| 368 | + property workflow: WideString read Fworkflow write Fworkflow; | |
| 369 | + property workflow_state: WideString read Fworkflow_state write Fworkflow_state; | |
| 370 | + property link_type: WideString read Flink_type write Flink_type; | |
| 371 | + end; | |
| 372 | + | |
| 373 | + kt_linked_documents = array of kt_linked_document; { "urn:KnowledgeTree" } | |
| 374 | + | |
| 375 | + | |
| 376 | + // ************************************************************************ // | |
| 377 | + // Namespace : urn:KnowledgeTree | |
| 378 | + // ************************************************************************ // | |
| 379 | + kt_linked_document_response = class(TRemotable) | |
| 380 | + private | |
| 381 | + Fstatus_code: Integer; | |
| 382 | + Fmessage_: WideString; | |
| 383 | + Fparent_document_id: WideString; | |
| 384 | + Flinks: kt_linked_documents; | |
| 385 | + public | |
| 386 | + destructor Destroy; override; | |
| 387 | + published | |
| 388 | + property status_code: Integer read Fstatus_code write Fstatus_code; | |
| 389 | + property message_: WideString read Fmessage_ write Fmessage_; | |
| 390 | + property parent_document_id: WideString read Fparent_document_id write Fparent_document_id; | |
| 391 | + property links: kt_linked_documents read Flinks write Flinks; | |
| 392 | + end; | |
| 393 | + | |
| 394 | + kt_document_transaction_history = array of kt_document_transaction_history_item; { "urn:KnowledgeTree" } | |
| 395 | + | |
| 396 | + | |
| 397 | + // ************************************************************************ // | |
| 398 | + // Namespace : urn:KnowledgeTree | |
| 399 | + // ************************************************************************ // | |
| 400 | + kt_document_transaction_history_response = class(TRemotable) | |
| 401 | + private | |
| 402 | + Fstatus_code: Integer; | |
| 403 | + Fmessage_: WideString; | |
| 404 | + Fhistory: kt_document_transaction_history; | |
| 405 | + public | |
| 406 | + destructor Destroy; override; | |
| 407 | + published | |
| 408 | + property status_code: Integer read Fstatus_code write Fstatus_code; | |
| 409 | + property message_: WideString read Fmessage_ write Fmessage_; | |
| 410 | + property history: kt_document_transaction_history read Fhistory write Fhistory; | |
| 411 | + end; | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + // ************************************************************************ // | |
| 416 | + // Namespace : urn:KnowledgeTree | |
| 417 | + // ************************************************************************ // | |
| 418 | + kt_document_version_history_item = class(TRemotable) | |
| 419 | + private | |
| 420 | + Fuser: Integer; | |
| 421 | + Fmetadata_version: WideString; | |
| 422 | + Fcontent_version: WideString; | |
| 423 | + published | |
| 424 | + property user: Integer read Fuser write Fuser; | |
| 425 | + property metadata_version: WideString read Fmetadata_version write Fmetadata_version; | |
| 426 | + property content_version: WideString read Fcontent_version write Fcontent_version; | |
| 427 | + end; | |
| 428 | + | |
| 429 | + kt_document_version_history = array of kt_document_version_history_item; { "urn:KnowledgeTree" } | |
| 430 | + | |
| 431 | + | |
| 432 | + // ************************************************************************ // | |
| 433 | + // Namespace : urn:KnowledgeTree | |
| 434 | + // ************************************************************************ // | |
| 435 | + kt_document_version_history_response = class(TRemotable) | |
| 436 | + private | |
| 437 | + Fstatus_code: Integer; | |
| 438 | + Fmessage_: WideString; | |
| 439 | + Fhistory: kt_document_version_history; | |
| 440 | + public | |
| 441 | + destructor Destroy; override; | |
| 442 | + published | |
| 443 | + property status_code: Integer read Fstatus_code write Fstatus_code; | |
| 444 | + property message_: WideString read Fmessage_ write Fmessage_; | |
| 445 | + property history: kt_document_version_history read Fhistory write Fhistory; | |
| 446 | + end; | |
| 447 | + | |
| 448 | + kt_document_types_array = array of WideString; { "urn:KnowledgeTree" } | |
| 449 | + | |
| 450 | + | |
| 451 | + // ************************************************************************ // | |
| 452 | + // Namespace : urn:KnowledgeTree | |
| 453 | + // ************************************************************************ // | |
| 454 | + kt_document_types_response = class(TRemotable) | |
| 455 | + private | |
| 456 | + Fstatus_code: Integer; | |
| 457 | + Fmessage_: WideString; | |
| 458 | + Fdocument_types: kt_document_types_array; | |
| 459 | + published | |
| 460 | + property status_code: Integer read Fstatus_code write Fstatus_code; | |
| 461 | + property message_: WideString read Fmessage_ write Fmessage_; | |
| 462 | + property document_types: kt_document_types_array read Fdocument_types write Fdocument_types; | |
| 463 | + end; | |
| 464 | + | |
| 465 | + | |
| 466 | + // ************************************************************************ // | |
| 467 | + // Namespace : http://schemas.xmlsoap.org/soap/envelope/ | |
| 468 | + // soapAction: http://schemas.xmlsoap.org/soap/envelope/#KTWebService#%operationName% | |
| 469 | + // transport : http://schemas.xmlsoap.org/soap/http | |
| 470 | + // style : rpc | |
| 471 | + // binding : KnowledgeTreeBinding | |
| 472 | + // service : KnowledgeTreeService | |
| 473 | + // port : KnowledgeTreePort | |
| 474 | + // URL : http://ktdms.trunk/ktwebservice/webservice.php | |
| 475 | + // ************************************************************************ // | |
| 476 | + KnowledgeTreePort = interface(IInvokable) | |
| 477 | + ['{FA35CA60-1DC3-B3C7-6C65-BE4E3A6A8A22}'] | |
| 478 | + function login(const username: WideString; const password: WideString; const ip: WideString): kt_response; stdcall; | |
| 479 | + function anonymous_login(const ip: WideString): kt_response; stdcall; | |
| 480 | + function logout(const session_id: WideString): kt_response; stdcall; | |
| 481 | + function get_folder_detail(const session_id: WideString; const folder_id: Integer): kt_folder_detail; stdcall; | |
| 482 | + function get_folder_detail_by_name(const session_id: WideString; const folder_name: WideString): kt_folder_detail; stdcall; | |
| 483 | + function get_folder_contents(const session_id: WideString; const folder_id: Integer; const depth: Integer; const what: WideString): kt_folder_contents; stdcall; | |
| 484 | + function create_folder(const session_id: WideString; const folder_id: Integer; const folder_name: WideString): kt_folder_detail; stdcall; | |
| 485 | + function delete_folder(const session_id: WideString; const folder_id: Integer; const reason: WideString): kt_response; stdcall; | |
| 486 | + function rename_folder(const session_id: WideString; const folder_id: Integer; const newname: WideString): kt_response; stdcall; | |
| 487 | + function get_document_links(const session_id: WideString; const document_id: Integer): kt_linked_document_response; stdcall; | |
| 488 | + function link_documents(const session_id: WideString; const parent_document_id: Integer; const child_document_id: Integer; const type_: WideString): kt_response; stdcall; | |
| 489 | + function unlink_documents(const session_id: WideString; const parent_document_id: Integer; const child_document_id: Integer): kt_response; stdcall; | |
| 490 | + function copy_folder(const session_id: WideString; const source_id: Integer; const target_id: Integer; const reason: WideString): kt_response; stdcall; | |
| 491 | + function move_folder(const session_id: WideString; const source_id: Integer; const target_id: Integer; const reason: WideString): kt_response; stdcall; | |
| 492 | + function get_document_detail(const session_id: WideString; const document_id: Integer): kt_document_detail; stdcall; | |
| 493 | + function checkin_document(const session_id: WideString; const document_id: Integer; const filename: WideString; const reason: WideString; const tempfilename: WideString; const major_update: Boolean): kt_response; stdcall; | |
| 494 | + function checkin_small_document(const session_id: WideString; const document_id: Integer; const filename: WideString; const reason: WideString; const base64: WideString; const major_update: Boolean): kt_response; stdcall; | |
| 495 | + function checkin_base64_document(const session_id: WideString; const document_id: Integer; const filename: WideString; const reason: WideString; const base64: WideString; const major_update: Boolean): kt_response; stdcall; | |
| 496 | + function add_document(const session_id: WideString; const folder_id: Integer; const title: WideString; const filename: WideString; const documentype: WideString; const tempfilename: WideString): kt_document_detail; stdcall; | |
| 497 | + function add_small_document(const session_id: WideString; const folder_id: Integer; const title: WideString; const filename: WideString; const documentype: WideString; const base64: WideString): kt_document_detail; stdcall; | |
| 498 | + function add_base64_document(const session_id: WideString; const folder_id: Integer; const title: WideString; const filename: WideString; const documentype: WideString; const base64: WideString): kt_document_detail; stdcall; | |
| 499 | + function get_document_detail_by_name(const session_id: WideString; const document_name: WideString; const what: WideString): kt_document_detail; stdcall; | |
| 500 | + function checkout_document(const session_id: WideString; const document_id: Integer; const reason: WideString): kt_response; stdcall; | |
| 501 | + function checkout_small_document(const session_id: WideString; const document_id: Integer; const reason: WideString; const download: Boolean): kt_response; stdcall; | |
| 502 | + function checkout_base64_document(const session_id: WideString; const document_id: Integer; const reason: WideString; const download: Boolean): kt_response; stdcall; | |
| 503 | + function undo_document_checkout(const session_id: WideString; const document_id: Integer; const reason: WideString): kt_response; stdcall; | |
| 504 | + function download_document(const session_id: WideString; const document_id: Integer): kt_response; stdcall; | |
| 505 | + function download_small_document(const session_id: WideString; const document_id: Integer): kt_response; stdcall; | |
| 506 | + function download_base64_document(const session_id: WideString; const document_id: Integer): kt_response; stdcall; | |
| 507 | + function delete_document(const session_id: WideString; const document_id: Integer; const reason: WideString): kt_response; stdcall; | |
| 508 | + function change_document_owner(const session_id: WideString; const document_id: Integer; const username: WideString; const reason: WideString): kt_response; stdcall; | |
| 509 | + function copy_document(const session_id: WideString; const document_id: Integer; const folder_id: Integer; const reason: WideString; const newtitle: WideString; const newfilename: WideString): kt_response; stdcall; | |
| 510 | + function move_document(const session_id: WideString; const document_id: Integer; const folder_id: Integer; const reason: WideString; const newtitle: WideString; const newfilename: WideString): kt_response; stdcall; | |
| 511 | + function rename_document_title(const session_id: WideString; const document_id: Integer; const newtitle: WideString): kt_response; stdcall; | |
| 512 | + function rename_document_filename(const session_id: WideString; const document_id: Integer; const newfilename: WideString): kt_response; stdcall; | |
| 513 | + function change_document_type(const session_id: WideString; const document_id: Integer; const documenttype: WideString): kt_response; stdcall; | |
| 514 | + function start_document_workflow(const session_id: WideString; const document_id: Integer; const workflow: WideString): kt_response; stdcall; | |
| 515 | + function delete_document_workflow(const session_id: WideString; const document_id: Integer): kt_response; stdcall; | |
| 516 | + function perform_document_workflow_transition(const session_id: WideString; const document_id: Integer; const transition: WideString; const reason: WideString): kt_response; stdcall; | |
| 517 | + function get_document_metadata(const session_id: WideString; const document_id: Integer): kt_metadata_response; stdcall; | |
| 518 | + function get_document_type_metadata(const session_id: WideString; const document_type: WideString): kt_metadata_response; stdcall; | |
| 519 | + function update_document_metadata(const session_id: WideString; const document_id: Integer; const metadata: kt_metadata_fieldsets): kt_response; stdcall; | |
| 520 | + function get_document_workflow_transitions(const session_id: WideString; const document_id: Integer): kt_document_transitions_response; stdcall; | |
| 521 | + function get_document_workflow_state(const session_id: WideString; const document_id: Integer): kt_response; stdcall; | |
| 522 | + function get_document_transaction_history(const session_id: WideString; const document_id: Integer): kt_document_transaction_history_response; stdcall; | |
| 523 | + function get_document_version_history(const session_id: WideString; const document_id: Integer): kt_document_version_history_response; stdcall; | |
| 524 | + function get_document_types(const session_id: WideString): kt_document_types_response; stdcall; | |
| 525 | + function get_document_link_types(const session_id: WideString): kt_document_types_response; stdcall; | |
| 526 | + end; | |
| 527 | + | |
| 528 | +function GetKnowledgeTreePort(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): KnowledgeTreePort; | |
| 529 | + | |
| 530 | + | |
| 531 | +implementation | |
| 532 | + | |
| 533 | +function GetKnowledgeTreePort(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): KnowledgeTreePort; | |
| 534 | +const | |
| 535 | + defWSDL = 'http://ktdms.trunk/ktwebservice/webservice.php?wsdl'; | |
| 536 | + defURL = 'http://ktdms.trunk/ktwebservice/webservice.php'; | |
| 537 | + defSvc = 'KnowledgeTreeService'; | |
| 538 | + defPrt = 'KnowledgeTreePort'; | |
| 539 | +var | |
| 540 | + RIO: THTTPRIO; | |
| 541 | +begin | |
| 542 | + Result := nil; | |
| 543 | + if (Addr = '') then | |
| 544 | + begin | |
| 545 | + if UseWSDL then | |
| 546 | + Addr := defWSDL | |
| 547 | + else | |
| 548 | + Addr := defURL; | |
| 549 | + end; | |
| 550 | + if HTTPRIO = nil then | |
| 551 | + RIO := THTTPRIO.Create(nil) | |
| 552 | + else | |
| 553 | + RIO := HTTPRIO; | |
| 554 | + try | |
| 555 | + Result := (RIO as KnowledgeTreePort); | |
| 556 | + if UseWSDL then | |
| 557 | + begin | |
| 558 | + RIO.WSDLLocation := Addr; | |
| 559 | + RIO.Service := defSvc; | |
| 560 | + RIO.Port := defPrt; | |
| 561 | + end else | |
| 562 | + RIO.URL := Addr; | |
| 563 | + finally | |
| 564 | + if (Result = nil) and (HTTPRIO = nil) then | |
| 565 | + RIO.Free; | |
| 566 | + end; | |
| 567 | +end; | |
| 568 | + | |
| 569 | + | |
| 570 | +destructor kt_folder_item.Destroy; | |
| 571 | +var | |
| 572 | + I: Integer; | |
| 573 | +begin | |
| 574 | + for I := 0 to Length(Fitems)-1 do | |
| 575 | + if Assigned(Fitems[I]) then | |
| 576 | + Fitems[I].Free; | |
| 577 | + SetLength(Fitems, 0); | |
| 578 | + inherited Destroy; | |
| 579 | +end; | |
| 580 | + | |
| 581 | +destructor kt_folder_contents.Destroy; | |
| 582 | +var | |
| 583 | + I: Integer; | |
| 584 | +begin | |
| 585 | + for I := 0 to Length(Fitems)-1 do | |
| 586 | + if Assigned(Fitems[I]) then | |
| 587 | + Fitems[I].Free; | |
| 588 | + SetLength(Fitems, 0); | |
| 589 | + inherited Destroy; | |
| 590 | +end; | |
| 591 | + | |
| 592 | +destructor kt_metadata_field.Destroy; | |
| 593 | +var | |
| 594 | + I: Integer; | |
| 595 | +begin | |
| 596 | + for I := 0 to Length(Fselection)-1 do | |
| 597 | + if Assigned(Fselection[I]) then | |
| 598 | + Fselection[I].Free; | |
| 599 | + SetLength(Fselection, 0); | |
| 600 | + inherited Destroy; | |
| 601 | +end; | |
| 602 | + | |
| 603 | +destructor kt_metadata_fieldset.Destroy; | |
| 604 | +var | |
| 605 | + I: Integer; | |
| 606 | +begin | |
| 607 | + for I := 0 to Length(Ffields)-1 do | |
| 608 | + if Assigned(Ffields[I]) then | |
| 609 | + Ffields[I].Free; | |
| 610 | + SetLength(Ffields, 0); | |
| 611 | + inherited Destroy; | |
| 612 | +end; | |
| 613 | + | |
| 614 | +destructor kt_metadata_response.Destroy; | |
| 615 | +var | |
| 616 | + I: Integer; | |
| 617 | +begin | |
| 618 | + for I := 0 to Length(Fmetadata)-1 do | |
| 619 | + if Assigned(Fmetadata[I]) then | |
| 620 | + Fmetadata[I].Free; | |
| 621 | + SetLength(Fmetadata, 0); | |
| 622 | + inherited Destroy; | |
| 623 | +end; | |
| 624 | + | |
| 625 | +destructor kt_linked_document_response.Destroy; | |
| 626 | +var | |
| 627 | + I: Integer; | |
| 628 | +begin | |
| 629 | + for I := 0 to Length(Flinks)-1 do | |
| 630 | + if Assigned(Flinks[I]) then | |
| 631 | + Flinks[I].Free; | |
| 632 | + SetLength(Flinks, 0); | |
| 633 | + inherited Destroy; | |
| 634 | +end; | |
| 635 | + | |
| 636 | +destructor kt_document_transaction_history_response.Destroy; | |
| 637 | +var | |
| 638 | + I: Integer; | |
| 639 | +begin | |
| 640 | + for I := 0 to Length(Fhistory)-1 do | |
| 641 | + if Assigned(Fhistory[I]) then | |
| 642 | + Fhistory[I].Free; | |
| 643 | + SetLength(Fhistory, 0); | |
| 644 | + inherited Destroy; | |
| 645 | +end; | |
| 646 | + | |
| 647 | +destructor kt_document_version_history_response.Destroy; | |
| 648 | +var | |
| 649 | + I: Integer; | |
| 650 | +begin | |
| 651 | + for I := 0 to Length(Fhistory)-1 do | |
| 652 | + if Assigned(Fhistory[I]) then | |
| 653 | + Fhistory[I].Free; | |
| 654 | + SetLength(Fhistory, 0); | |
| 655 | + inherited Destroy; | |
| 656 | +end; | |
| 657 | + | |
| 658 | +initialization | |
| 659 | + InvRegistry.RegisterInterface(TypeInfo(KnowledgeTreePort), 'http://schemas.xmlsoap.org/soap/envelope/', ''); | |
| 660 | + InvRegistry.RegisterDefaultSOAPAction(TypeInfo(KnowledgeTreePort), 'http://schemas.xmlsoap.org/soap/envelope/#KTWebService#%operationName%'); | |
| 661 | + InvRegistry.RegisterExternalParamName(TypeInfo(KnowledgeTreePort), 'link_documents', 'type_', 'type'); | |
| 662 | + RemClassRegistry.RegisterXSClass(kt_response, 'urn:KnowledgeTree', 'kt_response'); | |
| 663 | + RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_response), 'message_', 'message'); | |
| 664 | + RemClassRegistry.RegisterXSClass(kt_folder_detail, 'urn:KnowledgeTree', 'kt_folder_detail'); | |
| 665 | + RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_folder_detail), 'message_', 'message'); | |
| 666 | + RemClassRegistry.RegisterXSInfo(TypeInfo(kt_folder_items), 'urn:KnowledgeTree', 'kt_folder_items'); | |
| 667 | + RemClassRegistry.RegisterXSClass(kt_folder_item, 'urn:KnowledgeTree', 'kt_folder_item'); | |
| 668 | + RemClassRegistry.RegisterXSClass(kt_folder_contents, 'urn:KnowledgeTree', 'kt_folder_contents'); | |
| 669 | + RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_folder_contents), 'message_', 'message'); | |
| 670 | + RemClassRegistry.RegisterXSClass(kt_document_detail, 'urn:KnowledgeTree', 'kt_document_detail'); | |
| 671 | + RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_document_detail), 'message_', 'message'); | |
| 672 | + RemClassRegistry.RegisterXSClass(kt_metadata_selection_item, 'urn:KnowledgeTree', 'kt_metadata_selection_item'); | |
| 673 | + RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_metadata_selection_item), 'name_', 'name'); | |
| 674 | + RemClassRegistry.RegisterXSInfo(TypeInfo(kt_metadata_selection), 'urn:KnowledgeTree', 'kt_metadata_selection'); | |
| 675 | + RemClassRegistry.RegisterXSClass(kt_metadata_field, 'urn:KnowledgeTree', 'kt_metadata_field'); | |
| 676 | + RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_metadata_field), 'name_', 'name'); | |
| 677 | + RemClassRegistry.RegisterXSInfo(TypeInfo(kt_metadata_fields), 'urn:KnowledgeTree', 'kt_metadata_fields'); | |
| 678 | + RemClassRegistry.RegisterXSClass(kt_metadata_fieldset, 'urn:KnowledgeTree', 'kt_metadata_fieldset'); | |
| 679 | + RemClassRegistry.RegisterXSInfo(TypeInfo(kt_metadata_fieldsets), 'urn:KnowledgeTree', 'kt_metadata_fieldsets'); | |
| 680 | + RemClassRegistry.RegisterXSClass(kt_metadata_response, 'urn:KnowledgeTree', 'kt_metadata_response'); | |
| 681 | + RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_metadata_response), 'message_', 'message'); | |
| 682 | + RemClassRegistry.RegisterXSInfo(TypeInfo(kt_document_transitions), 'urn:KnowledgeTree', 'kt_document_transitions'); | |
| 683 | + RemClassRegistry.RegisterXSClass(kt_document_transitions_response, 'urn:KnowledgeTree', 'kt_document_transitions_response'); | |
| 684 | + RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_document_transitions_response), 'message_', 'message'); | |
| 685 | + RemClassRegistry.RegisterXSClass(kt_document_transaction_history_item, 'urn:KnowledgeTree', 'kt_document_transaction_history_item'); | |
| 686 | + RemClassRegistry.RegisterXSClass(kt_linked_document, 'urn:KnowledgeTree', 'kt_linked_document'); | |
| 687 | + RemClassRegistry.RegisterXSInfo(TypeInfo(kt_linked_documents), 'urn:KnowledgeTree', 'kt_linked_documents'); | |
| 688 | + RemClassRegistry.RegisterXSClass(kt_linked_document_response, 'urn:KnowledgeTree', 'kt_linked_document_response'); | |
| 689 | + RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_linked_document_response), 'message_', 'message'); | |
| 690 | + RemClassRegistry.RegisterXSInfo(TypeInfo(kt_document_transaction_history), 'urn:KnowledgeTree', 'kt_document_transaction_history'); | |
| 691 | + RemClassRegistry.RegisterXSClass(kt_document_transaction_history_response, 'urn:KnowledgeTree', 'kt_document_transaction_history_response'); | |
| 692 | + RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_document_transaction_history_response), 'message_', 'message'); | |
| 693 | + RemClassRegistry.RegisterXSClass(kt_document_version_history_item, 'urn:KnowledgeTree', 'kt_document_version_history_item'); | |
| 694 | + RemClassRegistry.RegisterXSInfo(TypeInfo(kt_document_version_history), 'urn:KnowledgeTree', 'kt_document_version_history'); | |
| 695 | + RemClassRegistry.RegisterXSClass(kt_document_version_history_response, 'urn:KnowledgeTree', 'kt_document_version_history_response'); | |
| 696 | + RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_document_version_history_response), 'message_', 'message'); | |
| 697 | + RemClassRegistry.RegisterXSInfo(TypeInfo(kt_document_types_array), 'urn:KnowledgeTree', 'kt_document_types_array'); | |
| 698 | + RemClassRegistry.RegisterXSClass(kt_document_types_response, 'urn:KnowledgeTree', 'kt_document_types_response'); | |
| 699 | + RemClassRegistry.RegisterExternalPropName(TypeInfo(kt_document_types_response), 'message_', 'message'); | |
| 700 | + | |
| 701 | +end. | ... | ... |