نمایش نتایج 1 تا 10 از 10

نام تاپیک: فراخوانی داده از میکروتیک و مقایسه آنها

  1. #1

    فراخوانی داده از میکروتیک و مقایسه آنها

    باسلام و احترام خدمت برنامه نویسان عزیز. بنده متاسفانه بصورت حرفه ای برنامه نویسی بلد نیستم. یه برنامه نوشتم که مقادیر رو از کاربر میگیره و به وسیله API به میکروتیک متصل میشه و تغییراتی که کاربر میخواد رو روی میکروتیک اعمال میکنه و در نهایت API رو میبنده. تو این مرحله میخوام برنامه بره و اطلاعات میکروتیک رو بگیره و بیاره و با مقادیری که کاربر میزنه مقایسه کنه و اگر مقادیر وارد شده متفاوت بود، تغییرات رو روی میکروتیک اعمال کنه. مثلا در مرحله اول، میخوام اسامی Interfaceهای میکروتیک رو بیاره و بهم نشون بده. تا اینجای برنامه که نوشتم میره و Count رو برابر با 3 قرار میده (مطابق تصویر) ولی نمیدونم چجوری باید اسامی این Interface هارو مثلا توی یه لیست کشویی یا ComboBox نمایش بده الان اطلاعات غلطی رو میاره برام نمایش میده در COM1. اگر عزیزان کمکم کنن واقعا ازشون ممنون میشم...
    1111111.jpg
    عکس های ضمیمه عکس های ضمیمه
    آخرین ویرایش به وسیله مهدی مرادی : شنبه 07 آبان 1401 در 12:50 عصر

  2. #2

    نقل قول: فراخوانی داده از میکروتیک و مقایسه آنها

    سلام
    اگه منظورتون اینه که در آخر تصویری که نشون دادید ، مقدار identity را بجای 3 ، متن List<ITikReSentence> نشون میده ، بخاطر اینه که هر چند نوع این متغییرِ identity (یا هر چیزی که هست) را نشون ندادید ، اما از نوع List ای از ITikReSentence یا فرزندانشون هست .
    اون 3 ای هم که نشون میده ، تعداد اعضای این کالکشن هست .


    کالکشن هم مستقیما که در دستور کنسول نمایش داده نمیشه . باید پروپرتی مورد نظر اعضاشون را مشخص کنید که کدوم پروپرتی (یا فیلد و ...) از عضوِ این کالکشن از این را نشون بده .
    در پروپرتیِ Items یا ItemsSource ئه ComboBox هم همینطوره . باید پروپرتی (یا پروپرتی های) مورد نظر از اعضای کالکشن را مشخص کنید .
    مگر اینکه براش و در پروپرتیِ ItemTemplate اش مشخص کنید که چه پروپرتی از اعضای این کالکشن را نمایش بده .
    آخرین ویرایش به وسیله SajjadKhati : شنبه 07 آبان 1401 در 14:49 عصر

  3. #3

    نقل قول: فراخوانی داده از میکروتیک و مقایسه آنها

    سلام دوست عزیز. ممنونم که وقت گذاشتین و جوابمو دادین تشکر واقعا
    اگر تو عکس اول که از نتیجه ارسال اطلاعات در کومبو باکس گذاشتیم ملاحظه کنید، 4 تا نتیجه داده که نوشته ApiReSentance.id=*1|name=ether1-moradi و...
    من فقط میخوام قسمت name=ether1-moradi رو نشون بده
    البته کلمه name رو هم نمیخوام. فقط مقداری از نام این Interface هارو میخوام بیاره و نمایش بده توی کومبو باکسم.
    در واقع میخوام تو خط اول فقط بنویسه:
    ether1-moradi
    ether2
    ether3
    و...

  4. #4

    نقل قول: فراخوانی داده از میکروتیک و مقایسه آنها

    نقل قول نوشته شده توسط مهدی مرادی مشاهده تاپیک
    سلام دوست عزیز. ممنونم که وقت گذاشتین و جوابمو دادین تشکر واقعا
    اگر تو عکس اول که از نتیجه ارسال اطلاعات در کومبو باکس گذاشتیم ملاحظه کنید، 4 تا نتیجه داده که نوشته ApiReSentance.id=*1|name=ether1-moradi و...
    من فقط میخوام قسمت name=ether1-moradi رو نشون بده
    البته کلمه name رو هم نمیخوام. فقط مقداری از نام این Interface هارو میخوام بیاره و نمایش بده توی کومبو باکسم.
    در واقع میخوام تو خط اول فقط بنویسه:
    ether1-moradi
    ether2
    ether3
    و...
    اول اینکه اینترفیس ها اصلا پیاده سازیِ اعضا و بدنه ای برای اعضاشون ندارن که بخواد ازش شی ساخته بشه تا بخواین اعضاش را استفاده کنید . بلکه شی از کلاس هایی که اون اینترفیس مورد نظر را پیاده سازی میکنه ، مورد استفاده قرار میگیره .

    به قول تون خط اول در کمبوباکس ، کد را بصورت زیر نشون میده :

    ApiReSentance.id=*1|name=ether1-moradi ...

    چون اعضای کاکشنِ identity که از نوع ITikReSentence یا فرزندانشون هستن (چون من که با سلسله مراتب ارث بری ITikReSentence ، و نوع identity آشنا نیستم که دقیق چیه و از عکس بالا هم نمیشه چیزی تشخیص داد) ، در اون کلاس ، متد ToString اش ، اون طور بازنویسی شد .

    شما یا باید کلاسی بسازید که از نوعی که اعضای identity هستن ، ارث بری کنه و در اون کلاس ، متد ToString را بصورت شخصی و هر طور که میخواید ، بازنویسی کنید و بعد ، نوع اعضای identity را این بار ، شی ای از کلاس جدیدتون در نظر بگیرید (یا متد ToString را بصورت Extension Method استفاده کنید) .

    یا اینکه روش اصولی تر اینه که برای ComboBox تون ، یک ItemTemplate در نظر بگیرید (در این صورت ، عضو مورد نظرتون برای Binding ، باید پروپرتی باشه) .


    یا اینکه نهایتا ، بجای خط زیر :


    COM1.ItemsSource = identity;


    در کد بالاتون ، بجاش ، از پروپرتیِ Items ئه ComboBox استفاده کنید و اون پروپرتی (یا فیلد و ...) از اعضای کالکشن identity را مستقیما توش بنویسید .
    فرضا مقدار name ای که میگید را بنویسید . چون من که نمیدونم مقدار name ، در چه پروپرتی و یا عضوی ذخیره هست . نمیدونم آیا اسم اون عضو ، همین name هست یا نه . چون شما به کد دسترسی دارید و از اطلاعاتی که دادید ، مشخص نیست که مقدار اون ether1-moradi ای که گفتید ، با نامِ چه عضوی ذخیره هست .

    اگه فرضا اون ITikReSentence تون ، شی مورد نظر باشه و عضوی که در اون مد نظر دارین ، عضوی بنام "name" باشه ، این طور میشه :


    COM!.Items.Add(identity[0].name);


    اون 0 هم ، ایندکس 0 ام از آرایه ی مورد نظر هست .

    اما اگه شرایطِ Binding برای اعضای این کلاس مورد نظرتون مناسب هست (هم عضو مورد نظرتون ، پروپرتی باشه و هم اون کلاسِ کالکشن تون ، اینترفیس INotifyPropertyChanged را برای ایندکسر مورد نظر پیاده یازی میکنن . البته اگه زمانی که مقدار کالکشن تون تغییر میکنه ، براتون مهم باشه) ، بهتره بجای این کدها ، در xaml ، پروپرتی ItemsSource را Binding کنید . براش هم ItemTemplate بنویسید .

  5. #5

    نقل قول: فراخوانی داده از میکروتیک و مقایسه آنها

    سلام مهندس جان؛ واقعا ممنونم بابت راهنمایی عالی که کردین منو. طبق دستورات شما داشتم پیش میرفتم که توضیحاتتون یه چیزی رو توی ذهنم آورد، اونم این بود که باید یه کاری کنم فقط دیتای مربوط به نام interfaceهارو برام بیاره که به این دستور توی میکروتیک رسیدم: /interface/print proplist=default-name
    با این دستور فقط لیست interfaceهای میکروتیک رو لیست میکنه که جوابش این بود:
    # DEFAULT-NAME
    0 R ether1
    1 R ether2
    2 R ether3

    حالا مشکل جدیدم اینه که وقتی میخوام این دستور رو توی کد بنویسم باید از دستور Connection.CreateParameter استفاده کنم و وقتی این دستور رو میزنم مقدار Count رو بهم صفر میده. ولی وقتی این دستور رو برمیدارم، بهم مقدار Count رو مقدار 3 میده. وقتی ام دستور رو کامل روبروی CreateCommand میزنم هم ارور میده و ازم این دستور رو قبول نمیکنه چون فاصله بین Print و proplist رو نمیفهمه. خیلی سخت شده. از صبح درگیرشم ولی هنوز نتونستم راهی براش پیدا کنم. این مورد رو بتونم حل کنم دیتایی که میاره برام کاملا همونیه که میخوام و مشکل کامل حل میشه، البته امیدوارم
    2222222.png

  6. #6

    نقل قول: فراخوانی داده از میکروتیک و مقایسه آنها

    آها ، منظورتون از اینترفیس ، اینترفیسِ سی شارپ نیست . بلکه یه اصطلاحی در میکروتیک هست .
    من که نه میدونم میکروتیک چیه و نه با کلاس و توابعش کار کردم . بنابراین کمک چندانی نمیتونم در مسئله ی پست قبلی تون کنم .
    خودتون باید اسنادش را کامل بخونید و ببینید چجوری کار میکنه (که فکر کنم اسنادش در زیر باشه) :

    GitHub - danikf/tik4net: Manage mikrotik routers with .NET C#‎ code via ADO.NET like API or enjoy O/R mapper like highlevel api.

    و

    Manual:API - MikroTik Wiki

    =======

    ولی ظاهرا شما از یه شی (شی connection)، در ورودیِ متدِ CreateCommand هم از همون شی استفاده کردید . البته این دلیل نمیشه ولی میگم حواستون به این قسمت هم باشه .
    کلا طرز استفاده از کلاس های میکروتیک را خودتون باید پیگیری کنید .

  7. #7

    نقل قول: فراخوانی داده از میکروتیک و مقایسه آنها

    سلام مهندس جان. بله منظورم اینترفیس میکروتیک هستش. یعنی نام اینترفیس های میکروتیک رو بهم نشون بده توی ComboBox. ببخشید اگه خوب توضیح ندادم و شمارو گیج کردم عزیزم.
    بله سایت github رو خوندم و دقیقا همین صفحه رو هم دیدم ولی وقتی تیکه کد:
     ITikCommand cmd = connection.CreateCommandAndParameters(@"/interface/print                            ?proplist=default-name
    ?#|");

    میزنم نتیجه اطلاعات دیگه ای رو میاره برام. گرچه تعداد رو درست نشون میده ولی توی combobox اطلاعات دیگه ای رو میاره...
    333333333.png

  8. #8

    نقل قول: فراخوانی داده از میکروتیک و مقایسه آنها

    نقل قول نوشته شده توسط مهدی مرادی مشاهده تاپیک
    سلام مهندس جان. بله منظورم اینترفیس میکروتیک هستش. یعنی نام اینترفیس های میکروتیک رو بهم نشون بده توی ComboBox. ببخشید اگه خوب توضیح ندادم و شمارو گیج کردم عزیزم.
    بله سایت github رو خوندم و دقیقا همین صفحه رو هم دیدم ولی وقتی تیکه کد:
     ITikCommand cmd = connection.CreateCommandAndParameters(@"/interface/print                            ?proplist=default-name
    ?#|");

    میزنم نتیجه اطلاعات دیگه ای رو میاره برام. گرچه تعداد رو درست نشون میده ولی توی combobox اطلاعات دیگه ای رو میاره...
    333333333.png
    سلامی مجدد
    شما چه در این کد (یا حتی کدهای پست های قبلی) ، روی خطی که متغییر identity مقدار میگیره ، یه break point بذارید و یه بار f10 را بزنید (تا کنترل ، به خطِ بعد از خطی که متغییر identity تعریف شده بود ، بره) و بعدش موس را روی متغییر identity ببرید . در این صورت کنار و در سمت چپ مقداری که برای identity نشون میده ، یه فِلِش هست (تا اینجا مثل عکس دوم در پست اول که گذاشته بودید) .
    روی اون فِلِش کلیک کنید تا لیست اش باز بشه و در اونجا ببینید چه عضوی پیدا میکنید و آیا عضوی پیدا میکنید که مد نظرتون باشه؟


    نهایتا اگه خواستید ، پروژه تون را اینجا بذارید تا شاید ببینم میتونم کمک کنم یا نه (نمیدونم بتونم کمکی کنم یا نه . چون هیچ آشنایی ای با میکروتیک ندارم و اصلا نمیدونم چیه و قضیه ی اینترفیس هاشم که گفتید ، نمیدونم) .
    میکروتیک ، یه قطعه ی سخت افزاری هست؟ یعنی برای اجرای این برنامه تون ، نیاز به داشتن اون قطعه ی سخت افزاری هست؟

  9. #9

    نقل قول: فراخوانی داده از میکروتیک و مقایسه آنها

    سلام وقت بخیر. بله مهندس جان میکروتیک یه چیزی مثل سوئیچ و روتر های سیسکو هستش ولی تفاوت های زیادی رو داره. منم میخوام براش به وسیله این برنامه Script بنویسم که کار حدود 30 دقیقه تا 4 ساعت رو تو یه لحظه خودش انجام بده و ایرادات کانفیگ کردن میکروتیک رو خودش پیدا کنه و اعمال کنه و در نهایت گزارش بده که چه تغییراتی رو اعمال کرده.
    الان یه کد رو تصادفی زدم و اطلاعات نام میکروتیک رو آورد و توی combobox و TextBox آورد.
    44444.png
    مشکل اینجاست که وقتی میخوام دستور /interface/print proplist=default-name رو بزنم، چون proplist یه Parametr محسوب میشه، قبول نمیکنه این دستور رو پشت سر هم بنویسم. اگر فقط دستور interface/print رو بزنم، کار میکنه ولی کل اطلاعات interfaceهارو میاره که اصلا به درد من نمیخوره (همون عکس اولی که گذاشتم و کلی اطلاعات اضافی داشت). اگرم بخوام دستور رو به این شکل بنویسم، جواب خالی میاره و هیچی نمایش نمیده.
    var cmd = connection.CreateCommand("/interface/print",                            connection.CreateParameter("proplist", "default-name")
    );


    var list = cmd.ExecuteList();


    اگر کد رو هم اینجوری بزنم بازم جواب اطلاعات کامل اینترفیس هارو میاره برام که میشه مثل مدل اول که بازم به دردم نمیخوره این:
    var cmd = connection.CreateCommandAndParameters(@"/interface/print                            ?proplist=default-name
    ?#|");


    var list = cmd.ExecuteList();


    گیر کردم سر اینکه دستور proplist=default-name رو چجوری بهش بگم تا فقط اطلاعات نام اینترفیس هارو بیاره برام...

  10. #10

    نقل قول: فراخوانی داده از میکروتیک و مقایسه آنها

    چیزی که در پست قبلی گفتم را انجام بدید .
    همچنین در اینترفیس (یا کلاس) ITikReSentence (کلا درون کلاسِ نوع متغییر identity) و همچنین در فرزندانش برید و ببینید چه اعضایی داره .

    با تصادفی زدن کد که نمیشه کاری ازش پیش برد . اول باید مستنداتش را کامل بخونید و بعد کد بنویسید .

تاپیک های مشابه

  1. لایسنس سیسکو Cisco - لایسنس CUCM - لایسنس FirePower – لایسنس WebEx
    نوشته شده توسط root255 در بخش تالار های مرتبط با شبکه و امنیت
    پاسخ: 0
    آخرین پست: شنبه 22 آبان 1400, 17:13 عصر
  2. مشکل در دریافت نوتیفیکیشن از پارس
    نوشته شده توسط dalmif در بخش Android Studio
    پاسخ: 3
    آخرین پست: جمعه 12 تیر 1394, 15:10 عصر
  3. آیکون نوتیفیکیشن پارس
    نوشته شده توسط roboman78 در بخش Android Studio
    پاسخ: 2
    آخرین پست: پنج شنبه 11 تیر 1394, 21:03 عصر
  4. ارسال نوتیفیکیسن برای کاربران از طریق parse notification
    نوشته شده توسط moh_sen201 در بخش Android Studio
    پاسخ: 2
    آخرین پست: یک شنبه 20 مهر 1393, 23:35 عصر
  5. ارسال نوتیفیکیسن برای کاربران
    نوشته شده توسط moh_sen201 در بخش Android Studio
    پاسخ: 1
    آخرین پست: یک شنبه 16 شهریور 1393, 12:52 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •