質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

Q&A

解決済

1回答

2169閲覧

【Dynamics 365 / Web API】データを取得すると、先頭が一部欠けた状態

pecchan

総合スコア555

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

0グッド

0クリップ

投稿2019/02/21 01:51

お世話になっております。
Dynamics 365上のデータを、WebAPIを介して取得しようと試みてます。

下記コードで取得は出来ました。

C#

1Console.WriteLine("取引先企業名: {0}", account["name"]);

の、nameように
プロパティ(カラム)指定するとそのプロパティは取得できてますが、

c#

1Console.WriteLine(account);

のようにJSONを丸まる出力すると、下のようになぜか先頭のデータが一部欠損して表示されます。
※{(カッコ)も無い

どうすれば全て表示されるでしょうか?
分かる方宜しくお願い致します。

json

1 "name": "ABCセンター", 2 "os_deetashubetsu": 717680001, 3 "accountid": "4ae3794f-8479-e611-8141-c4346bacbe48", 4 "yominame": "ABCセンター" 5} 6{ 7 "@odata.etag": "W/\"19195213\"", 8 "name": "TEST", 9 "os_deetashubetsu": 717680000, 10 "accountid": "b13e0ee6-1e22-e511-810d-c4346bacaf34", 11 "os_bikou": "aaaaaa205", 12 "address1_city": "滋賀県", 13 "telephone2": "0799999999", 14 "address1_postalcode": "5220054", 15 "telephone1": "079999999", 16 "yominame": "テスト", 17 "address1_composite": "滋賀県xxxxxxxxxx" 18}

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6 7using Microsoft.IdentityModel.Clients.ActiveDirectory; 8using System.Net.Http; 9using System.Net.Http.Headers; 10using Newtonsoft.Json.Linq; 11using System.Net; 12 13namespace ConsoleApplication1 14{ 15 class Program 16 { 17 static string serverUrl = "https://xxxxxxxxx.crm5.dynamics.com"; 18 static string authUrl = "https://login.windows.net/common"; 19 static string clientId = "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"; 20 static string reirectUri = "http://localhost/webapi"; 21 22 23 24 static void Main(string[] args) 25 { 26 try 27 { 28 29 System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 30 31 32 33 AuthenticationContext authContext = new AuthenticationContext(authUrl); 34 AuthenticationResult result = authContext.AcquireToken(serverUrl, clientId, new Uri(reirectUri)); 35 36 Program app = new Program(); 37 38 //Task.WaitAll(Task.Run(async () => await app.Run(result.AccessToken))); 39 Task.WaitAll(Task.Run(async () => await app.RunViewQueries(result.AccessToken))); 40 41 } 42 catch(System.Exception ex) 43 { 44 Console.WriteLine(""); 45 Console.WriteLine(ex.Message); 46 } 47 finally 48 { 49 Console.WriteLine("Press <Enter> to exit."); 50 Console.ReadLine(); 51 } 52 } 53 54 /* 55 public async Task Run(string accessToken) 56 { 57 // HttpClient の作成 58 using (HttpClient httpClient = new HttpClient()) 59 { 60 // Web API アドレスの作成 61 string serviceUrl = serverUrl + "/api/data/v8.0/"; 62 // ヘッダーの設定 63 httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 64 httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 65 } 66 } 67 */ 68 69 public async Task RunViewQueries(string accessToken) 70 { 71 // HttpClient の作成 72 using (HttpClient httpClient = new HttpClient()) 73 { 74 // Web API アドレスの作成 75 string serviceUrl = serverUrl + "/api/data/v8.0/"; 76 // ヘッダーの設定 77 httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 78 httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 79 80 // 取引先企業ビューの一覧取得 81 HttpResponseMessage retrieveRes = await httpClient.GetAsync(serviceUrl + "savedqueries?$select=name&$filter=returnedtypecode eq 'account'"); 82 JToken results = JObject.Parse(retrieveRes.Content.ReadAsStringAsync().Result)["value"]; 83 84 // ビュー名の表示 85 foreach (JToken result in results) 86 { 87 Console.WriteLine("ビュー名: {0}", result["name"]); 88 } 89 90 // 取引先企業レコードの取得 91 retrieveRes = await httpClient.GetAsync(serviceUrl + "accounts?savedQuery=" + results[0]["savedqueryid"]); 92 JToken accounts = JObject.Parse(retrieveRes.Content.ReadAsStringAsync().Result)["value"]; 93 94 // 取引先企業名の表示 95 foreach (JToken account in accounts) 96 { 97 // Console.WriteLine("取引先企業名: {0}", account["name"]); 98 Console.WriteLine(account); 99 } 100 } 101 } 102 103 104 } 105} 106

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/02/21 02:19

JToken というのは何なのですか? それを説明するか、それが分かる記事があれば URL を貼ってもらえると回答できる人が増えそうです。(今の情報では Dynamics 365 を知らない自分にはお手上げです) また、やりたいことが応答の JSON 文字列をそのまま string 型で取得したいということであれば、別の方法もありそうです。真に何がしたいのかも書いてください。
guest

回答1

0

ベストアンサー

確認するには、Console.WriteLine(account);にブレークポイントを置いてデバッグ実行し、
accountの中身を確認してください。
多分コンソールの画面バッファのサイズ以上に出力したから上が欠けただけだと思いますが…

投稿2019/02/21 02:51

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pecchan

2019/02/21 05:22

おっしゃる通りでした。お恥ずかしい限りです。 有難う御座いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問