作成者別アーカイブ: taka

C#、ネットワークドライブ存在チェックの不思議

ちょっとメモがてら。

Yドライブをネットワークドライブとして割り当てている。
アドレスを仮に 192.168.100.1 とする。
割り当てられているフォルダは \\192.168.100.1\common ということで。

この時、C#でディレクトリの存在をチェックを行うと、

は Ture

しかし、

は False

ここまではいい。納得。
 
 
そこで次に、前回のエントリでやってみたC#で作ったDLLをExcelから使えるようにしてみたケースで試してみる。

DLLは下記のような単純なコード。

これでExcelのVBAで下記のようにすると True が返ってくる。
Cドライブなので納得。

そして、下記のようにすると・・・

やはり True が返ってくる・・・
(違いはCheckDirectory内の文字が C か Y かだけ)

もちろん、他の未使用のドライブレターで試すとFalseが返ってくる。

Yドライブはネットワークドライブで Directory.Exists(@”Y:\”) ではFalseとなるのに、なぜこの場合はTrueと返ってくるのか・・・

用途としてはこの方が助かりはするけれども。
 
 
 

Excelで使えるDLLをC#で作る

せっかくC#を多少使えるようになってきたので、これまでExcelのマクロ(VBA)で作っていたものをDLLにしてみることに。
というのも、VisualStudioが優秀すぎてこっちで作る方が楽なので。
 
 
早速、VisualStudioを立ち上げるわけですが、今回の目的上、管理者として実行する必要がある。


 
 
次に、適当にプロジェクトを新規作成し、下記の通り設定。
 
まずはプロジェクトのプロパティを開いて、「アセンブリ情報」をクリック。


 
 
 
新たにウィンドウが開かれるので、そのなかの「アセンブリをCOM参照可能にする」にチェックを入れて「OK」


 
 
 
次は「ビルド」の項目へ移り、その中の「COM相互運用機能の登録」にチェックを入れる。


 
 
 
これで下準備が完了したので、下記のようなクラスを適当に作ってみる。
この時、
using System.Runtime.InteropServices;
を追記するのを忘れないように。
 

ポイントとしてはインターフェースの実装(7行目から)とクラスに属性を設定する(14行目)こと。

これをビルドすればDLLのできあがり。
 
 
出来上がったDLLはRegAsmを使って登録する必要があるので、DLLの置かれているディレクトリで下記を実行。

尚、登録を解除するには下記のようにする。

尚、regasm.exeは「v4.0.3019」のほか「v2.0.50727」にもある。
対象のフレームワークのバージョンに合わせる必要があるらしいが、敢えて古いものを作ることもあまりないと思うので、今回はそのまま最新のものを使用。
 
 
 
ここからはExcelでの作業。
 
 
Excelを開いてVisualBasicEditor(VBE)を立ち上げる。


 
 
VBEのメニューから「ツール」→「参照設定」と進む。


 
 
その中に「ExcelVbaExtension」とDLLの名前が出ていればOK。


 
 
あとは下記のようにすれば使えるようになる。
(これだとシートがアクティブになる度にメッセージボックスが出てきて面倒なだけだけど・・・)

 
 
こんな感じにね。


 
 

C#でAmazonMWSの各種APIを使ってみる

出品詳細レポート
「出品詳細レポート」を取得して在庫確認に利用してみる。これで便利なのは「optional-payment-type-exclusion」で除外されている支払方法が確認できたり、「scheduled-delivery-sku-set」で配送スケジュールに割り当てられているSKUリストを確認できたりする。

確か、除外されている支払方法はセラーセントラルからは確認できなかったと思うし、配送スケジュールは個別に「在庫管理」から「詳細の編集」で見ていくしかなかったはずなので、それらが一覧で確認できると設定漏れなどが一目瞭然なので、わりと便利。


在庫健全性レポート
「FBA在庫リスト」という名称にしてしまったけど、保管期間や単位期間毎の出荷数、販売予測週数を見ることが出来るので、FBAでドンドン拡販していく商品と、引き上げた方が良い商品の判断に利用できる。

売れている商品はどうしても目に付くけど、全く売れてない商品なんてのは全く目に付かなくて、最悪の場合、忘れ去られる。

1年後くらいに「え!?これまだ残ってたの!?」なんてことになりかねないので、180日保管とか270日保管に数字が上がってきていたら対策を早々に練ろう。


競合価格調査
カートの獲得率を左右する要素はいくつかあるようだけど、やはりなんと言っても価格が一番影響が大きい。

ただ、2~3%くらいなら高くてもカートは獲得できるので、なるべく無駄な値下げ競争はしないように調整していきたい。


MWS設定画面
MWSを利用するには

「AWS_ACCESS_KEY_ID」やら
「AWS_SECRET_ACCESS_KEY」
「MERCHANT_ID」
「MARKETPLACE_ID」
「MWS認証トークン」
なんかが必要になってくる。
それらはここで設定している。


とまぁ、こんな感じで趣味と実益を兼ねてプログラミングの勉強中。

まだ、受注リストが50件を超えた場合の「NextToken」の処理が出来てなかったり、「次回更新」の日付や時間が変わらなかったり、まぁ、いろいろ足らないところだらけだけど、FBAの在庫状況が、保管期間と単位期間あたりの出荷数と在庫切れになるまでの予測とがパッと見でわかるようになったのは大きい。

あ・・・Form1とかって・・・とりあえずは「動けばいいんだよ!」ってことで。

GetMyPriceForSKU の謎

SellerSKUって重複はしない。
SellerSKUがわかれば、その商品の価格もわかる。

まぁ、当たり前のことなんだけど、なぜか一部の商品で「FulfillmentChannel」に「Amazon」と「MERCHANT」の両方が入ってくる。

<GetMyPriceForSKUResult SellerSKU=”ABCDEFG” status=”Success”>
 <Product>
  <Identifiers>
  (省略)
   <SKUIdentifier>
   (省略)
    <SellerSKU>
    ABCDEFG</SellerSKU>
   </SKUIdentifier>
  </Identifiers>
  <Offers>
   <Offer>
   (省略)
    <FulfillmentChannel>
    AMAZON</FulfillmentChannel>
    (省略)
    <SellerSKU>
    ABCDEFG_01</SellerSKU>
   </Offer>
   <Offer>
   (省略)
    <FulfillmentChannel>
    MERCHANT</FulfillmentChannel>
    <SellerSKU>
    ABCDEFG</SellerSKU>
   </Offer>
  </Offers>
 </Product>
</GetMyPriceForSKUResult>

で、SellerSKUが違うんだけど、なにこれ・・・


2015/04/22 追記

SellerSKUは重複しない、という点だけを見ていると上記現象は「不思議」なんだけど、この挙動は起こり得るらしい。

というのも、流れとして GetMyPriceForSKU で投げた SKU が、どの ASIN なのかを特定し、その ASIN を元にして、出品者の販売可能状態にある商品情報を返答するから。

具体的に起こり得る状況としては、通常はFBA出荷だけど、諸事情によりFBA在庫がなくなったら出品者出荷にしたい、けどまたすぐにFBAに納品する、といったような状況で、在庫管理や販売管理上の問題でSKUを別にしたい時がある。
(かかる送料コストがFBA出荷と出品者出荷では当然違うので、出荷チャネルによってコスト計算が変わってくるとか、同一商品でも仕入れ先が異なるとかで、SKUを明確に分けたいといったことがある)

そうなると、ひとつの ASIN に対して複数の SellerSKU を作らざるを得なくなるので、「ASIN を元にした出品者の販売可能状態にある商品情報」が複数出来上がってしまうことがある。

ん~、処理の流れを追えば、ひとつのSellerSKUを投げたのにレスポンスが複数になる、という状況は理解できるけど、「SellerSKUは重複しない」という前提で商品を登録し販売・運用しているのに、その重複しないSellerSKUを投げても、レスポンスに他のSellerSKU情報も含まれるというのはどうも感覚的に不自然。

出品者にとって唯一無二のSellerSKUのはずなのに、返答にはそれ以外の不要な情報までわざわざひっつけてくるんだもの。

しかし、そういった仕様のようなので、「複数のレスポンスがある」ということを考えておかないといけないのね。

C#でAmazonMWSの注文APIを使ってみる

C#でMWSの注文APIを利用する
やりたいことはいろいろあるけれど、C#の勉強がてらAmazonのAPIを使ってみることに。

とりあえず、注文一覧の取得。

名前空間とかインスタンスとか、初歩的なことでかなりつまずいた感はあるけれど、MWSのクライアントライブラリが優秀なおかげか、なんとか動くようにはなるもんだな。