2016-08-31 5 views
0

私はPowershell v4.0です。私は自分のUIのドロップダウンを持っているので、自分のデータベースのデータで満たしています。Powershell単一行のデータリターンのコンボボックスへの復帰

function GetDynamicContracts{ 
    $ContractQuery = "select con.ContractNumber as Name, c.ContractID from foo..campaign c inner join foo..campaigntemplate ct on c.campaignid = ct.campaignid 
inner join foo..template t on ct.templateid = t.templateid inner join bar..contracts con on con.ContractID = c.ContractID 
    where c.ProductType = 'INTRO' and t.FileName = 'Intro Dynamic Template' and c.DeleteFlag = 0" 

    $ContractResult = ExecuteSelect "Bar" $ContractQuery 
    return , $ContractResult 
} 

このコードは正常に動作します:それはこのようになりますバックエンドで

$ConfigDynamicContractID.ItemsSource = (GetDynamicContracts).DefaultView

:私はそうのようなデータをつかむ関数を呼び出します。私はその後、上記のテーブルはお互いに話すことができないので、それぞれを個別に呼び出してpowershellでフィルタリングする必要があると言われました。だからここに私のコードです:

function GetDynamicContracts{ 

    $CampaignQuery = "Select c.* From foo..Campaign c join foo..CampaignTemplate ct on c.CampaignID = ct.CampaignID 
        join foo..Template t on ct.TemplateID = t.TemplateID 
        Where c.ProductType = 'INTRO' and t.FileName = 'Intro Dynamic Template' and c.DeleteFlag = 0" 
    $CampaignResults = ExecuteSelect "foo" $CampaignQuery 

    $ContractIDs = New-Object System.Collections.ArrayList 

    foreach($row in $CampaignResults.Rows){ 
     $ContractIDs.Add($row.ContractID) 
    } 
    $ContractIDs = $ContractIDs -join "," 

    $PHQuery = "Select ContractID, ContractNumber as Name From Contracts Where ContractID in ($ContractIDs)" 
    $PHResults = ExecuteSelect "Bar" $PHQuery 

    #Log $MyInvocation.MyCommand $PSBoundParameters 
    return ,$PHResults 
} 

このコードは、単一の行を返すときには機能しません。しかし、私はこの関数呼び出しを2つに分けると、それは機能します。以下を参照してください:

1つの関数内で2つの実行選択を行うと、 '、'はデータを返すときに実行する処理に失敗するようです。誰も理由を説明できますか?私は回避策があるので、早めにお時間をいただきありがとうございます。

+0

ArrayList.addはアイテムインデックスが追加された出力をスパムし、AFAIKは '> $ null'または' | $ null 'の 'return'文に関係なく常に抑制されるべきです。アウトナル。ただ言って。 – wOxxOm

+0

PowerShell関数は、リダイレクトされないパイプラインにすべてを出力します。 'Return'キーワードの使用は余計で余計です。だから私が 'ArrayList'の' Add'メソッドを検索すると([ここ](https://msdn.microsoft.com/en-us/library/system.collections.arraylist.add%28v=vs.110%29) .aspx?f = 255&MSPPError = -2147217396))は、メソッドが追加された項目のインデックスを出力することを示します。それがリダイレクトされない限り、あなたが望むかもしれない何かに加えて、 'Int'出力をパイプラインに渡します。 – TheMadTechnician

+0

ありがとうございました。これはPowershellのむしろ面倒な側面です。別のスレッドで、$ null = @ {'do code'}の関数でコードをラップし、最後にreturn(return $ a)を実行すると$ aだけが返されることがわかりました。それは醜いですが、パワーシェルを使った厄介なパンキーは保証されていないようです。 – SuperVillainPresident

答えて

0

@TheMadTechnicianと@wOxxOmが指摘するように、ArrayListはインデックスを返り値と戻り値にスパムし、関数内でスパムを受け取ったものすべてを返します。だから私が$ PHResultsを期待したとき、私はArrayListスパムも得ました。私はArrayList以外のものを使うことができました。あるいは、私が$null = @{ 'Code' }に関数コードをラップして、私が望む変数を返すと、その変数が得られます。それは醜いですが、それは動作します。

関連する問題