Systematics
  • About Us
    • אודות סיסטמטיקס
      • על סיסטמטיקס
      • לקוחות
      • תעשיה
      • קהילה
      • הורדת תעודות ISO
      • בלוג
      • דרכי הגעה
      • Privacy Policy
    • תחומים בסיסטמטיקס
      • תחום GIS
      • תחום 3D CAD/PLM
      • תחום MATLAB & Simulink
      • תחום 3D Printing
    • רכישה
      • חנות מדפסות תלת מימד וחומרים
      • חנות ESRI
      • צור קשר עם מכירות
    • תמיכה
      • תמיכה ושירותי ייעוץ
      • סקר שביעות רצון לקוחות
      • נהלי התקנה ורישוי GIS
      • נהלי התקנה ורישוי MATLAB
      • נהלי התקנה ורישוי SOLIDWORKS
      • פתיחת קריאות שירות
      • פתיחת קריאות שירות תחום GIS
    • קורסים
      • אודות מרכז ההדרכה
      • קורסים GIS
      • קורסים SOLIDWORKS
      • קורסים MATLAB & Simulink
      • קורסים ALTIUM
      • קורסים 3D Printing
    • קריירה
      • משרות
      • לעבוד בסיסטמטיקס
  • GIS
    • ראשי
      • אודות תחום GIS
      • קהילה
    • מוצרים ופתרונות
      • GIS בענן
      • GIS ברשויות מקומיות
      • GIS ארגוני – ArcGIS Enterprise
      • GIS למקצוענים – ArcGIS Pro
      • GIS למפתחים
      • חידושי מערכת ArcGIS
      • פתרונות GIS
    • DATA
      • מוצרי Data חברת סיסטמטיקס
      • סקירה על מוצרי ה-DATA
    • מקורות למידה
      • אירועים ברחבי הארץ
      • וובינרים מקוונים LIVE
      • וובינרים מוקלטים לצפייה ישירה
      • קורסים GIS
      • סיפורי לקוחות GIS
      • תכנית סטארטאפים GIS
      • עדכונים וניוזלטרים
      • בלוג
    • תמיכה
      • תמיכה טכנית
      • מקורות מידע
      • שירותים – תמיכה וייעוץ
      • נהלי התקנה ורישוי GIS
      • פתיחת קריאת שירות GIS
    • רכישה
  • 3D CAD/PLM
    • ראשי
      • אודות תחום 3D CAD/PLM
      • סיפורי הצלחה
      • רשתות חברתיות
      • דרושים לעבודה עם SOLIDWORKS
      • צרו קשר
    • מוצרים
      • SOLIDWORKS | CAD
      • 3DEXPERIENCE
      • CATIA | HIGH END CAD
      • ENOVIA | PLM
      • SOLIDWORKS Simulation
      • Altium Designer | PCB
      • 3D PRINTING
      • FREE TOOLS
      • מה חדש בגרסת SOLIDWORKS 2026
    • פתרונות
      • סטארטאפים
      • אקדמיה וחינוך
    • מקורות למידה
      • אירועים וסמינרים
      • וובינרים מקצועיים
      • וובינרים מוקלטים לצפייה ישירה
      • קורסים SOLIDWORKS
      • קורסים ALTIUM
      • בלוג SOLIDWORKS
      • בלוג ALTIUM
    • תמיכה
      • תמיכה טכנית
      • SOLIDWORKS Term Licensing
      • חידוש חוזה תחזוקה SOLIDWORKS
      • חידוש חוזה תחזוקה ALTIUM
      • מקורות מידע
      • תמיכה | FAQ
      • שירותים
      • Citrix GoToAssist Agent
      • פתיחת קריאות שירות
    • לקוחות
      • סיפורי הצלחה
  • MATLAB & Simulink
    • ראשי
      • אודות תחום MATLAB & Simulink
      • קהילה
    • מוצרים
      • MATLAB
      • יכולת ושילובי MATLAB
      • Audio System Toolbox
      • MATLAB ו-Simulink בענן
      • תכן מערכות SerDes
      • Deploying to Hardware
      • Machine Learning
      • Deep Learning
      • Physical Modeling
      • Parallel Computing Toolbox
      • MATLAB Report Generator
      • Symbolic Math Toolbox
      • Sensor Fusion & Tracking Toolbox
      • Speedgoat
    • פתרונות
      • MATLAB & Simulink Product Family
      • בינה מלאכותית – Artificial Intelligence
      • Certification
      • Communication Systems
      • מערכות לתעשיית ה-Medical
      • מערכות אוטונומיות ורובוטיקה
      • Electrification Renewable energy
      • ייצור קוד אוטומטי ישירות מ-MATLAB ו-Simulink
      • הטמעה לחומרה
      • Solutions by Industry
      • תכנית סטארטפים
    • מקורות למידה
      • אירועים קרובים
      • וובינרים מקוונים
      • וובינרים מוקלטים (VOD)
      • קורסים
      • סיפורי הצלחה
      • בלוג
    • תמיכה
      • נהלי התקנה ורישוי MATLAB
      • תמיכה וייעוץ
      • פתיחת קריאות שירות
    • הורדה
  • 3D Printing
    • ראשי
      • אודות תחום 3D Printing
      • קהילה
      • חנות מדפסות תלת מימד וחומרים
    • מדפסות וחומרי הדפסה
      • מדפסות תלת מימד
      • מדפסות HP Jet Fusion 3D
      • מדפסות MarkForged
      • מדפסות FORMLABS
      • פתרונות סריקה מבית PEEL 3D
      • חומרי הדפסה
      • פתרונות לתכנון 3D CAD
    • ייצור מתקדם
      • TULIP – פלטפורמה מבוססת ענן לניהול רצפת הייצור (Composable MES)
    • תעשיות
      • הנדסה, תכנון ופיתוח
      • תעשייה וייצור
      • ציוד רפואי
      • רפואת שיניים
      • אקדמיה ומחקר
      • מוסדות חינוך
      • עיצוב וייצור תכשיטים
    • מקורות למידה
      • אירועים
      • וובינרים
      • סיפורי הצלחה
      • קורסים
      • בלוג
    • תמיכה
      • תמיכה
      • FAQ מדפסות FORMLABS
      • פתיחת קריאות שירות
  • Contact Us
  • EN
  • About Us
    • Careers
  • Solutions
  • Industries
  • Customers
    • Customers
    • Success Stories
  • Support
  • Contact Us
  • HE
  • Menu Menu

Click to open the search input field Click to open the search input field Search | ENHE

עמוד הבית » בלוג » GIS Blog

  • ALL
  • GIS Blog
  • MATLAB With Fun
  • PCB Blog
  • Smart 3D Printing
  • SOLIDBlog

פיתוח Widget בסביבת הפיתוח של ArcGIS Experience Builder

קרן שטרן כהן
10/01/2021
GIS Blog

תגיות: ARCGIS | ArcGIS Experience Builder | Dev | Development | Enterprise | ESRI | GIS | JavaScript | JS | React | TypeScript

ה-ArcGIS Experience Builder מייצג את "הדור הבא" של מחוללי היישומים הגיאוגרפים של Esri. מחולל היישומים מאפשר למיישם להפוך במהירות את הנתונים המרחביים ליישומים ודפי אינטרנט מרשימים ללא צורך בפיתוח קוד. אבל איפה כל זה מותיר אותנו, המפתחים???

שתפו את הפוסט
  • שתף בפייסבוק
  • שתף בטוויטר
  • שתף בגוגל+
  • שתף בלינקדאין
  • שתף באימייל
  • שתף בוואטסאפ

בגרסת המפתחים של ה-ArcGIS Experience Builder ניתן להוסיף ווידג'טים שאינן חלק מתוכנת המדף, ניתן ליצור נושאים חדשים ובכך לאפשר ליישם אפליקציות עשירות יותר הכוללות פקדים שנתפרו ספציפית לדרישות ושיטות העבודה בארגון שלכם.

מעבר לכך, ה-Builder עדיין לא כולל את כל הפקדים הכלולים ב- ArcGIS JavaScript API 4.X, בבלוג זה נראה איך ניתן לבנות ווידג'ט משלנו המאפשר עבודה עם פקדים שעדיין לא כלולים ב-builder

 איך עושים את זה?

מתחילים בהתקנה מאד פשוטה של הסביבה:

  1. מורידים את ה-zip
  2. פורסים אותו על המחשב שלכם
  3. מתקינים את ה-server ב פקודת npm ci
  4. מתקינים את ה-client בפקודת npm ci

ניתן לקרוא יותר באתר

מפעילים את הסביבה

  1. הפעלת ה-server ב בפקודת npm start
  2. הפעלת ה-client בפקודת npm start

גלישה למחולל היישומים שלכם

https://<FQDN>:3001/

ואפשר להתחיל לפתח…

כמה מילים על הסביבה

JIMU  היא ספריית javaScript שה-builder עובד איתה וכוללת מספר חבילות:

  • jimu-core – אחראית לטעינת האפליקציה לפי ה-config , מנהלת את הגישה למאפיינים, מקורות המידע ועוד
  • jimu-arcgis – אחראית לעבודה עם ה-ArcGIS JavaScript API
  • jimu-ui – אחראית לחווית המשתמש
  • jimu-layout – אחראית לעימוד
  • jimu-for-builder- אחראית לפיתוח ה-setting page

ArcGIS JavaScript API 4.X – מאפשר גישה לכל יכולות ה-jsapi

אם הגעתם עד לכאן אני בטח לא צריכה להסביר לכם מה זה  TypeScript, React, Redux או Webpack…

אז בואו נפתח את סביבת הפיתוח (אני ממליצה על VS Code)  ונתחיל לפתח יחד את הווידג'ט הראשון שלנו…

כאמור, מטרת הווידג'ט שלנו היא עבודה עם פקדי jsapi שאינם כלולים עדיין ב-builder.

כל הפיתוח נעשה תחת ספריית your-extension

תחתיו ישנן 2 ספפריות:widgets ו-themes, רנחנו נעבוד תחת ספריית widgets

העתקת ספריית ה-simple לספריה חדשה

שינוי שם הספרייה ל-EXB

בקובץ ה-manifest.json

  • שינוי השם ל-EXB
  • הוספת תלות ב-jimu-arcgis

על מנת לבנות למיישם טופס בו יוכל לעדכן את מאפייני הווידג'ט עלינו לעושים settings לווידג'ט שלנו כך:

הוספת ספריית setting תחת ה-src

הוספת קובץ setting.tsx תחת ספריית setting

 

והקוד:

import {React, Immutable} from 'jimu-core';

import {AllWidgetSettingProps} from 'jimu-for-builder';

import {TextInput} from "jimu-ui";

import {IMConfig} from "../config";

import {JimuMapViewSelector} from 'jimu-ui/advanced/setting-components';

export default function (props: AllWidgetSettingProps<IMConfig>) {

const onExbPropertyChange = (evt: React.FormEvent<HTMLInputElement>) => {

props.onSettingChange({

id: props.id,

config: props.config.set("exampleConfigProperty",
evt.currentTarget.value)

});

};

const onMapSelected = (useMapWidgetIds: string[]) => {

props.onSettingChange({

id: props.id,

useMapWidgetIds: useMapWidgetIds

});

}

return (

<div>

Choose Map:

<div className="sample-use-map-view-setting p-2" >

<JimuMapViewSelector onSelect={onMapSelected}
useMapWidgetIds={props.useMapWidgetIds} />

</div>

<div className="sample-use-map-view-setting p-2">

exampleConfigProperty:

<TextInput

value={props.config.exampleConfigProperty}

onChange={onExbPropertyChange}

></TextInput>

</div>

</div>

);

}

דגשים:

IMConfig – מפנה להגדות שהוגדרו עבור הווידג'ט שלנו בקובץ ה-config.ts

import { ImmutableObject } from 'seamless-immutable';

export interface Config {

  exampleConfigProperty: string;

}

export type IMConfig = ImmutableObject<Config>;

את הקישור למפה מעדכנים באמצעות JimuMapViewSelector

על מנת לאפשר בטופס ההגדרות לעדכן משתנה מסוג string השתמשנו ב- TextInput

לכל סוגי המאפיינים, מעדכנים את המאפיינים בעזרת הפעלת props.onSettingChange (props הוא מסוג AllWidgetSettingProps)

לאחר שקיבלנו את כל מאפייני הןןידג'ט שלנו אנחנו יכולים לעבור לכתיבה שלו…

הקוד:

/** @jsx jsx */

import { React, AllWidgetProps, jsx } from 'jimu-core';

import { IMConfig } from '../config';

import { JimuMapViewComponent, JimuMapView } from 'jimu-arcgis';

import * as Legend from "esri/widgets/BasemapGallery";

import { useEffect } from 'react';

export default function Widget(props: AllWidgetProps<IMConfig>) {

  let apiWidgetContainer: React.RefObject<HTMLDivElement>;

  let legendWidget: Legend;

  let mapView: __esri.MapView | __esri.SceneView;

  apiWidgetContainer = React.createRef();

  let onActiveViewChange = (jimuMapView: JimuMapView) => {

    if (!(jimuMapView && jimuMapView.view)) {

      return;

    }

    mapView = jimuMapView.view;

    createAPIWidget();

  }

  let createAPIWidget = () => {

    if (!mapView) {

      return;

    }

    if (!legendWidget && apiWidgetContainer && apiWidgetContainer.current) {

      legendWidget = new Legend({

        view: mapView,

        container: apiWidgetContainer.current

      })

    }

  }

  useEffect(() => {

    createAPIWidget();

    return function cleanup() {

      if(legendWidget){

        legendWidget.destroy();

        legendWidget = null;

      }

    };

  });

  return (

    <div className="widget-demo jimu-widget m-2">

      <p>Simple Widget</p>

      <h3>{props.config.exampleConfigProperty}</h3>

      <JimuMapViewComponent

        useMapWidgetIds={props.useMapWidgetIds}

        onActiveViewChange={onActiveViewChange}></JimuMapViewComponent>

      {(!props.useMapWidgetIds || props.useMapWidgetIds.length < 1) ?

        "בחר מפה" :

        <div ref={apiWidgetContainer}></div>}

    </div>

  );

}

דגשים:

import { JimuMapViewComponent, JimuMapView } from 'jimu-arcgis';

import * as Legend from "esri/widgets/BasemapGallery";

הפניה ל-mapview מתבצעץ באמצעות המעטפת של JimuMapViewComponent המוסיפה את כל הנדרש לנו לקישור ולעבודה עםווידג'טים אך עדיין חושפת לנו את אותו mapView או sceneView שאנחנו מכירים מהעבודה עם ה-jsapi

מאחר וההדגמה נבנתה במקור לעבודה עם Legend כך קראנו ב-alias לפקד שלנו אך כל פקד של ה-jsapi שנפנה אליו (בקוד למעלה פונה ל- esri/widgets/BasemapGallery) יוכל לעבוד אם כל הנדרש להפעלתו זה הגדרת view ו-container (בהדגמה ראינו עבודה עם measure,legend ויש עוד).

useEffect – HOOK מאפשר בדומה ל componentDidMount and componentDidUpdate המוכרים מעבודה עם class לפעול לאחר טעינת הקומפוננטה.

React.createRef בשילוב עם הגדרת ref ל-div שחוזר מהפונקציה, מאפשר פניה ישירה למקום בקונטרול שלנו לצורך אכלוסו עם הפקד שלנו.

מאחר וקוד זה מדגים לנו רק כיצד להוסיף פקד של jsapi למפה, כצעד המשך אני ממליצה להוריד את הדוגמאות מאתר ה-github ולעבור באופן ספציפי על הווידג'ט get-map-coordinates-function.
בדוגמה זו ניתן לראות שילוב של עבודה עם events ו-watch על מאפיינים של פקד ה-view של ה-jsapi.
כמו כן, מדגים גם שימוש ב-useState HOOK.

לסיכום, כמה לינקים שחשוב שתכירו (אם עדיין לא הכרתם):

לכניסה לדף הבית – לחצו כאן

לכניסה ל- GITHUB

לכניסה ל- JSAPI

קישור להורדת קובץ ZIP פרויקט הקוד

ונסיים בברכת HAPPY CODING 😊

תגיות: ARCGIS | ArcGIS Experience Builder | Dev | Development | Enterprise | ESRI | GIS | JavaScript | JS | React | TypeScript

שתפו את הפוסט
  • שתף בפייסבוק
  • שתף בטוויטר
  • שתף בגוגל+
  • שתף בלינקדאין
  • שתף באימייל
  • שתף בוואטסאפ

פוסטים נוספים מאותה קטגוריה

החזון לעתיד של ג'ק דיינג'מונד, מייסד ומנכ"ל Esri

החזון לעתיד של ג'ק דיינג'מונד, מייסד ומנכ"ל Esri

GIS Blog

יגאל מונטנר
30/10/2025
מבוא ל-ArcGIS Enterprise

מבוא ל-ArcGIS Enterprise

GIS Blog

עפרה איינמר
04/09/2025
עריכה מתקדמת ב-Web עם ArcGIS Web Editor

עריכה מתקדמת ב-Web עם ArcGIS Web Editor

GIS Blog

שקד ברקאי
21/05/2025
תגובות | 0 תגובות

השאירו תגובה

כתיבת תגובה לבטל

האימייל לא יוצג באתר. שדות החובה מסומנים *

הרשמו לקבלת עדכונים

GIS Blog
שדה חובה

ההרשמה בוצעה בהצלחה. בדוק בתיבת הדואר שלך, הודעה המכילה קישור לאישור ההרשמה ואשר את הרשמתך.

רוצים ללמוד עוד? כיתבו לנו

כיתבו לנו


    social-media-youtubesocial-media-linkedin

    קהילה

    • קהילת סיסטמטיקס
    • SOLIDWORKS Blog
    • PCB Blog
    • MATLAB with Fun Blog
    • GIS Blog
    • Smart 3D Printing Blog
    • ESRI Israel FB
    • SOLIDWORKS Israel FB
    • MATLAB and Simulink LI
    • MATLAB and Simulink FB

    צור קשר

    • בקשת יצירת קשר
    • בקשת קשר טלפוני

    רכישה

    • בקשת הצעת מחיר
    • מכירות ESRI
    • מכירות SOLIDWORKS
    • מכירות ALTIUM
    • מכירות CATIA
    • מכירות ENOVIA
    • מכירות MATLAB & Simulink
    • מכירת מדפסות תלת מימד

    קורסים

    • קורסים GIS
    • קורסים SOLIDWORKS
    • קורסים MATLAB & Simulink
    • קורסים CATIA
    • קורסים ALTIUM
    • יצירת קשר מרכז ההדרכה

    תמיכה

    • מדיניות תמיכה
    • שירותי ייעוץ
    • פתיחת קריאות שירות

    פתרונות ומוצרים

    • תחום GIS
    • תחום 3D CAD/PLM
    • SOLIDWORKS
    • ALTIUM PCB
    • CATIA
    • ENOVIA
    • MATLAB & Simulink
    • תחום 3D Printing
    • 3D EXPERIENCE
    • תעשיות
    • אקדמיה
    • Start Ups

    אודות סיסטמטיקס

    • מי אנחנו?
    • תעודות הסמכת ISO
    • אירועים
    • דרכי גישה ומפה
    • יצירת קשר
    • מדיניות הפרטיות של אתר סיסטמטיקס – Privacy-Policy

    לקוחות

    • לקוחות סיסטמטיקס
    • סיפורי לקוח SOLIDWORKS
    • סיפורי לקוח MathWorks
    • סיפורי הצלחה GIS
    © 2025 All rights reserved SYSTEMATICS Ltd. | Privacy Policy
    • הישארו מעודכנים
    • כיתבו לנו
    Scroll to top