APSF,0,,-1,-1;-1;-1;-1;-1;+00;-00;-0;-;-;+1.6;-;;-|;-|;-|;+;+ //- Transfer objects from the current plan to a secondary plan based //- on various user-selectable criteria. //- //- Paul Rodman Feb 2008 //- //- V1.0 - 13 Feb 2008 //- Initial release dim i,ntarget,which,field,condition,source,target,n as integer dim splans(-1),sfields(-1),sconditions(-1),searchv,fld,ufn(4) as string dim doMatch,cleanout,invert,ok,met,copyUF as boolean dim data as APPlanObjectData dim newObj as APPlanObject SaveRestoreGlobal(true) SaveRestoreTag("TransferObjects") // Restore values saved from last run ntarget = RestoreIntegerValue("ntarget",0) which = RestoreIntegerValue("which",0) field = RestoreIntegerValue("field",0) condition = RestoreIntegerValue("condition",0) doMatch = RestoreBooleanValue("doMatch",false) cleanout = RestoreBooleanValue("cleanout",true) invert = RestoreBooleanValue("invert",false) copyUF = RestoreBooleanValue("copyUF",true) searchv = RestoreStringValue("searchv","") // Setup dialog SetCaptionParameter("Source Plan: "+GetPlanName(-1)) splans.Append "Create a new plan" for i=1 to nPlans if GetPlanName(i)<>GetPlanName(-1) then splans.Append GetPlanName(i) next SetPopupParameter("Target Plan",ntarget,splans) SetBooleanParameter("Empty target plan before transfer (if applicable)",cleanout) SetBooleanParameter("Copy user field headings to target plan",copyUF) SetChoiceParameter("Objects to consider for transfer",which,"All "+str(nObj)+" objects","Only the "+str(nHighlighted)+" highlighted objects", _ "Only the "+str(nObj-nHighlighted)+" unhighlighted objects") SetBooleanParameter("Also match on field contents",doMatch) for i=1 to 4 ufn(i)=UserHeading(i) sfields.Append "User Field #"+str(i)+" ("+ufn(i)+")" next sfields.Append "ID" sfields.Append "Name" sfields.Append "Type" sfields.Append "Notes" SetPopupParameter("Search field",field,sfields) ParameterDependency("Search field","Also match on field contents") sconditions.Append "Contains" sconditions.Append "Equals" sconditions.Append "Less than" sconditions.Append "Greater than" SetPopupParameter("Search condition",condition,sconditions) ParameterDependency("Search condition","Also match on field contents") SetStringParameter("Search value",searchv) ParameterDependency("Search value","Also match on field contents") SetBooleanParameter("Invert search condition",invert) ParameterDependency("Invert search condition","Also match on field contents") if not EditParameters("Transfer Objects") then return ntarget=GetPopupParameter("Target Plan") cleanout=GetBooleanParameter("Empty target plan before transfer (if applicable)") copyUF=GetBooleanParameter("Copy user field headings to target plan") which=GetChoiceParameter("Objects to consider for transfer") doMatch=GetBooleanParameter("Also match on field contents") field=GetPopupParameter("Search field") condition=GetPopupParameter("Search condition") searchv=GetStringParameter("Search value") invert=GetBooleanParameter("Invert search condition") // Save values for next run SaveIntegerValue("ntarget",ntarget) SaveIntegerValue("which",which) SaveIntegerValue("field",field) SaveIntegerValue("condition",condition) SaveBooleanValue("doMatch",doMatch) SaveBooleanValue("cleanout",cleanout) SaveBooleanValue("invert",invert) SaveBooleanValue("copyUF",copyUF) SaveStringValue("searchv",searchv) source = CurrentPlanNumber // Create target plan if necessary if ntarget=0 then target = NewPlan("",false,true) if target <= 0 then Print "Could not create new plan!" return end if else target=GetPlanNumber(splans(ntarget)) end if // Copy user field headings if necessary if copyUF then SelectPlan(target) for i=1 to 4 UserHeading(i)=ufn(i) next end if // Clean out target if necessary if cleanout then SelectPlan(target) for i=nObj downto 1 Obj(i).Delete next end if // Iterate through source objects and transfer where necessary SelectPlan(source) n=nObj StartProgress("Transferring objects",true,n) for i=1 to n if UpdateProgress(i) then exit SelectPlan(source) ok=false select case which case 0 // All objects ok=true case 1 // Highlighted ok=Obj(i).IsHighlighted case 2 // Unhighlighted ok=not Obj(i).IsHighlighted end select if ok then if doMatch then select case field case 0 to 3 fld=Obj(i).User(field+1) case 4 // ID fld=Obj(i).ID case 5 // Name fld=Obj(i).Name case 6 // Type fld=Obj(i).Type case 7 // Notes fld=Obj(i).Notes end select select case condition case 0 // Contains met=instr(fld,searchv)>0 case 1 // Equals (case-insensitive) met=fld=searchv case 2 // Less than if IsNumeric(fld) and IsNumeric(searchv) then met=CDbl(fld)CDbl(searchv) else met=fld>searchv end if end select if invert then met=not met if not met then ok=false end if if ok then // Transfer the object data = Obj(i).Contents SelectPlan(target) newObj = NewObject() newObj.Contents = data end if end if next StopProgress SelectPlan(source) Bleep